All Projects → nextapps-de → Flexsearch Server

nextapps-de / Flexsearch Server

High-performance FlexSearch Server for Node.js (Cluster)

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Flexsearch Server

Supervizer
NodeJS Application Manager
Stars: ✭ 278 (+61.63%)
Mutual labels:  server, clustering
Agoo
A High Performance HTTP Server for Ruby
Stars: ✭ 679 (+294.77%)
Mutual labels:  server, clustering
Rayo.js
Micro framework for Node.js
Stars: ✭ 170 (-1.16%)
Mutual labels:  server, clustering
Go Guerrilla
Mini SMTP server written in golang
Stars: ✭ 2,173 (+1163.37%)
Mutual labels:  server
Turnstile
An authentication framework for Swift.
Stars: ✭ 163 (-5.23%)
Mutual labels:  server
Mutual Tls Ssl
🔐 Tutorial of setting up Security for your API with one way authentication with TLS/SSL and mutual mutual authentication for a java based web server and a client with both Spring Boot. Different clients are provided such as Apache HttpClient, OkHttp, Spring RestTemplate, Spring WebFlux WebClient Jetty and Netty, the old and the new JDK HttpClient, the old and the new Jersey Client, Google HttpClient, Unirest, Retrofit, Feign, Methanol, vertx, Scala client Finagle, Featherbed, Dispatch Reboot, AsyncHttpClient, Sttp, Akka, Requests Scala, Http4s Blaze, Kotlin client Fuel, http4k, Kohttp and ktor. Also other server examples are available such as jersey with grizzly. Also gRPC examples are included
Stars: ✭ 163 (-5.23%)
Mutual labels:  server
Tigase Server
Highly optimized, extremely modular and very flexible XMPP/Jabber server
Stars: ✭ 170 (-1.16%)
Mutual labels:  server
Lru Cache
💫 A feature complete LRU cache implementation in C++
Stars: ✭ 162 (-5.81%)
Mutual labels:  server
Psiphon
A multi-functional version of a popular network circumvention tool
Stars: ✭ 169 (-1.74%)
Mutual labels:  server
Node Git Server
🎡 A configurable git server written in Node.js
Stars: ✭ 163 (-5.23%)
Mutual labels:  server
Unity Fastpacedmultiplayer
Features a Networking Framework to be used on top of Unity Networking, in order to implement an Authoritative Server with Lag Compensation, Client-Side Prediction/Server Reconciliation and Entity Interpolation
Stars: ✭ 162 (-5.81%)
Mutual labels:  server
Falcon
A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS.
Stars: ✭ 2,058 (+1096.51%)
Mutual labels:  server
Socketio
Socket.IO Java Server based on Netty. was created to meet gaming performance requirements. battle tested and in use by Playtech Microservices API Gateway.
Stars: ✭ 166 (-3.49%)
Mutual labels:  server
Myserver
MyServer is your own localhost web server. you can setup PHP, Apache, Nginx and MySQL servers on your android devices or linux like Ubuntu etc. MyServer is Developed for android terminal like Termux or GNURoot Debian terminal.
Stars: ✭ 160 (-6.98%)
Mutual labels:  server
Scala Server Toolkit
Functional programming toolkit for building server applications in Scala.
Stars: ✭ 170 (-1.16%)
Mutual labels:  server
Poseidon
Poseidon Server Framework (refactor WIP)
Stars: ✭ 162 (-5.81%)
Mutual labels:  server
Mars
Asynchronous Block-Level Storage Replication
Stars: ✭ 168 (-2.33%)
Mutual labels:  clustering
Newsrecommender
A news recommendation system tailored for user communities
Stars: ✭ 164 (-4.65%)
Mutual labels:  clustering
Lear
Linux Engine for Asset Retrieval - speed-profiled C HTTP server
Stars: ✭ 165 (-4.07%)
Mutual labels:  server
Casbin Server
Casbin as a Service (CaaS)
Stars: ✭ 171 (-0.58%)
Mutual labels:  server


Search Library

High-performance FlexSearch Server for Node.js

A full documentation of FlexSearch is available here: https://github.com/nextapps-de/flexsearch

Cluster (Vertical Scaling)

FlexSearch Server actually use Node.js Clusters and a Connection Pool to balance all incoming load through the workers.


The performance gain of workers depends on the complexity of the index and how much time a query takes.

For most situations disabled workers performs a lot better, e.g.:

Single Thread
(Request per seconds)
Cluster
(Request per seconds)
Query Time < 10 ms 6122 1215
Query Time > 1000 ms 114 1041

Note: A query time of 10 ms is already based on a large index.

Sharding / Replication (Horizontal Scaling)

Basically the current codebase has all requirements to provide also scaling in horizontal direction. If this project gains popularity I will made an implementation and also provide some docker bindings for an out-of-the-box installation.

Installation

npm install flexsearch-server

Run setup once when not installing via "npm install":

npm run setup

Run as a single web server:

npm start

Run as a server cluster:

npm run cluster

Run with a specified environment:

npm start production
npm run cluster test

The server is listening at:

Environment Server Address
development http://localhost
production

http://localhost:6780
https://localhost:6780
test http://localhost

The default port for production is 6780 (over HTTP) and 6781 (over HTTPS), you can change the default ports in the configs.

When NODE_ENV is set, all manual passed environments will be overridden.

API Overview

RESTful

Request Type Endpoint Description
GET / Returns info about the index
POST /add/:id/:content Add content to the index
POST /update/:id/:content Update content of the index
GET /search/:query Search for query
POST /remove/:id Remove id from the index

JSON

Request Type Endpoint Body Description
POST /add JSON Add multiple contents to the index
POST /update JSON Update multiple contents of the index
GET /search JSON Search for query (custom search)
POST /remove JSON Remove multiple ids from the index

Server Environment Variables

Variable Values Default Description
PORT integer 80 (development)
6780 (production)
Server listening port
PORT_SSL integer 443 (development)
6781 (production)
Server listening port
SSL true
false
false Starts a HTTPS server (additionally to HTTP)
FORCE_SSL true
false
false Accept HTTPS connections only
COMPRESS true
false
true Enable/Disable response compression (gzip)
WORKER integer
"auto"
"auto" Sets the number of workers or automatically determine available cpus
AUTOSAVE integer
false
10000 Enables persistent handler. Set the delay in milliseconds or disable by setting to false

Configuration

When you do not pass any custom options, the environment will be inherited from NODE_ENV by default.

Override the current environment (NODE_ENV) by adding a field in the root of package.json:

  "flexsearch": "production" // development, test

Or add a config payload in the root of package.json:

The field "client" holds the flexsearch options

  "flexsearch": {
    "server": {
      "debug": true,
      "port": 80,
      "port_ssl": 443,
      "force_ssl": false,
      "https": true,
      "compress": true,
      "autosave": 2000,
      "worker": "auto"
    },
    "client": {
      "async": false,
      "cache": 0,
      "worker": 4
    }
  }

Or provide a config json file for each environment respectively and pass file locations:

You can also provide a config json file to override the default settings globally.

  "flexsearch": {
    "development": "config/development.json",
    "production": "config/production.json",
    "test": "config/test",
    "default": "config/default.json"
}

Or just provide a flexsearch.json in the root of your project.

Persistence

Turn on persistence by setting a numeric value as delay on config.autosave. Flexsearch will automatically save the index to the local filesystem and also loads it when starting.

Disable persistence by setting this field to false.

Setup SSL for HTTPS Connections

Inside the folder cert add the certificate as a .crt file and the key as a .pem file for each environment respectively.

Development Environment:

cert/development.crt
cert/development.pem

Production Environment:

cert/production.crt
cert/production.pem

Important Notes

You can increase workers without any drawbacks, but when you decrease worker count, the old index doesnt restore completely from the filesystem. This will be fixed in an upcoming version. As long please do not decrease worker count when using persistent index.


Copyright 2019 Nextapps GmbH
Released under the Apache 2.0 License

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].