Skip to content
A fast, lightweight and more productive microservices framework
Java Other
  1. Java 99.3%
  2. Other 0.7%
Branch: master
Clone or download

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
audit upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
balance upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
basic-auth upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
body fixes #713 reformat the BodyConverter and add the missing import (#714) Jun 1, 2020
client upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
cluster upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
common upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
config upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
consul upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
content upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
correlation upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
cors upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
data-source upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
decryptor upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
deref-token upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
dump upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
email-sender upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
encode-decode upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
exception upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
handler upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
header upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
health upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
http-string upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
http-url upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
info upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
ip-whitelist upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
jaeger-tracing upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
logger-config upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
mask upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
metrics upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
monad-result upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
prometheus upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
rate-limit upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
registry
resource upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
sanitizer upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
security upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
server upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
service upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
status upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
switcher upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
traceability upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
utility upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
zookeeper upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020
.gitattributes Adding crt to .gitattributes and reverting change to crts. Jan 25, 2019
.gitignore fixes #534 merge the latest master to jdk11 branch Jun 9, 2019
.travis.yml update travis.yml to remove Oracle jdk11 Jun 21, 2019
CHANGELOG.md light-bot checkin CHANGELOG.md May 29, 2020
LICENSE Initial commit Sep 9, 2016
NOTICE fixes #440 update NOTICE.txt to add hdrhistogram-metrics-reservoir Mar 30, 2019
README.md update README.md Oct 24, 2019
pom.xml upgrade to version 2.0.15-SNAPSHOT after release May 30, 2020

README.md

A fast, lightweight and cloud-native microservices framework.

Stack Overflow | Google Group | Gitter Chat | Subreddit | Youtube Channel | Documentation | Contribution Guide |

Build Status codecov.io

Why call it Light-4J

Light means lightweight, lightning fast and shedding light on how to program with modern Java SE for cloud-native deployment.

Why am I doing it

I had been working on the Java EE platforms since early 2000 and suffered the performance and productivity issues. In 2014, I realized that the IT industry was moving from Monolithic to Microservices and from on-premise data centers to the public clouds.

To reduce the production cost for my applications, I need to find a lightweight platform that has a small memory footprint, high throughput, and low latency in Java. Java EE and Spring/Spring Boot are too heavy to be considered. Other lightweight Java platforms all have different issues on the separation between the business logic and technical cross-cutting concerns. Moreover, they are not cloud-native or designed for container/cloud.

Without finding anything suitable, I started to build my open-source platform light-4j on top of the Undertow HTTP core by following the principles. Because my approach is very radical, and it is against products from big corporations, I have been attacked by some entities online and offline constantly. However, I am so convinced that my approach is the future direction and spend all my effort to continue the development. Today, a lot of companies are using light-4j on production with very positive feedback. It further encourages me to devote myself to the framework and to extend the platform to build an ecosystem.

For users who benefit from the platform, you can become a sponsor for me so that I can put all my effort into the open-source projects.

Why use this framework

Fast and small memory footprint to lower production cost.

It is 44 times faster than the most popular microservices platform Spring Boot embedded Tomcat and use only 1/5 of memory. Here are the benchmark results compare with Spring Boot and other microservices frameworks. Here is the third party comparison with other Web frameworks.

Provide an embedded gateway to address cross-cutting concerns.

  • Plugin architecture for startup/shutdown hooks and middleware components
  • Distributed OAuth2 JWT security verification as part of the framework
  • Request and response validation against OpenAPI specification at runtime
  • Metrics collected in Influxdb/Prometheus and viewed from Grafana Dashboard for both services and clients
  • Global exception handling for runtime exception, API exception, and other checked exceptions
  • Mask sensitive data like the credit card, sin number, etc. before logging
  • Sanitize cross-site scripting for query parameters, request headers and body
  • Audit to dump important info or entire request and response.
  • Body parser to support different content types
  • Standardized response code and messages from the configuration file
  • Externalized configuration for all modules for the dockerized environment
  • CORS pre-flight handler for SPA (Angular or React) from another domain
  • Rate limiting for services that exposed outside to the Internet
  • Service registry and discovery support direct, Consul and Zookeeper
  • Client-side discovery and load balance to eliminate proxies
  • A client module that is tightly integrated with Light-OAuth2 and supports traceability

Design and Test driven development to increase productivity

Design OpenAPI specification and generate the service from it. The specification is also part of the framework to drive security verification and request validation at runtime.

Unit/End-to-End test stubs are generated to enable test driven approach for quality product.

Debugging within IDE just like standalone application for better developer productivity.

Built-in DevOps flow to support continuous integration to production

Dockerfile and DevOps supporting files are generated to support dockerization and continuous integration to production.

Multiple frameworks for different type of microservices

  • light-rest-4j is a RESTful microservice framework with OpenAPI specification for code generation and runtime security and validation
  • light-graphql-4j is a GraphQL microservice framework that supports schema generation from IDL and plugin.
  • light-hybrid-4j is a hybrid microservice framework that takes advantages of both monolithic and microservice architectures.
  • light-eventuate is a messaging based microservice framework based on Kafka, event sourcing and CQRS

Multiple languages support

All the open sourced frameworks are built in Java and we are working on Nodejs framework internally. In the future, we might provide Golang framework as well and all them are sharing the same eco-system and market place.

OAuth2 server, portal and services to form ecosystem

OAuth2 Server for security and Portal for production monitor and management. The portal is also a marketplace to link clients and services together.

Getting Started

There are two ways to start your project:

Light-codegen generator

You can use light-codegen to generate a working project. Currently, it supports light-rest-4j, light-graphql-4j, light-hybrid-server-4j and light-hybrid-service-4j. light-eventuate code generator is coming.

The light-codegen project README.md describes four ways to use the generator with examples.

  • Clone and build the light-codgen and use the codegen-cli command line utility
  • Use docker image networknt/light-codegen to run the codegen-cli command line utility
  • Use generate.sh from model-config repo to generate projects based on conventions.
  • Generate code from web site with codegen-web API. (API is ready but UI needs to be built)

Starting from an example project

The other way to start your project is to copy from light-example-4j.

You can find the description of these examples

Also, there are some tutorials

Debugging

To run/debug from IDE, you need to configure a Java application with main class "com.networknt.server.Server" and working directory is your project folder. There is no container and you are working on just a standalone Java application.

Start Server

In IDE

create a Java application that main class is com.networknt.server.Server and working directory is your project root folder. You can debug your server just like a POJO application.

From Maven

mvn exec:exec

Command Line

java -jar target/demo-0.1.0.jar

Stop Server

you can use Ctrl+C to kill the server but for production use the following command

kill -s TERM <pid>

The server has a shutdown hook and the above command allow it to clean up. For example, complete in-flight requests and close the database connections etc. If service registry and discovery is used, then the server will send shutdown event to service registry and keep processing requests for 30 seconds until all clients refreshes their local cache before shutting down.

Appreciation

License

Light-4j and all light-*-4j frameworks are available under the Apache 2.0 license. See the LICENSE file for more info.

You can’t perform that action at this time.