Microserver is a Java 8 native, zero configuration, standards based, battle hardened library to run Java Rest Microservices via a standard Java main class. Supporting pure Microservice or Micro-monolith styles.

Overview

Microserver

Build Status Join the chat at https://gitter.im/aol/micro-server

A convenient modular engine for Microservices. Microserver plugins offer seamless integration with Spring (core), Jersey, Guava, Tomcat, Grizzly, reactive programming, Hibernate (& Spring Data), Spring Boot, Codahale Metrics, Swagger and more to come!

screen shot 2016-05-06 at 12 30 26 pm

Microserver plugins video

Getting started video

Quick start

Install Microserver with Grizzly, Jackson and Jersey (Gradle config below)

    compile group: 'com.oath.microservices', name:'micro-grizzly-with-jersey', version:'x.yz'

Install Microserver with Tomcat, Jackson and Jersey (Gradle config below)

   compile group: 'com.oath.microservices', name:'micro-tomcat-with-jersey', version:'x.yz'    

Create and run a simple app

   @Rest
   @Path("/test")
   public class SimpleApp {

   	public static void main(String[] args){
   		new MicroserverApp(()->"test-app").run();
   	}
   	@GET
   	public String myEndPoint(){
   		return "hello world!";
   	}
   }

Browse to http://localhost:8080/test-app/test

See the response hello world!

Add plugins by adding them to your build file - rerun the app to get new end points, Spring beans and more!

Easy to use async NIO based REST

Return any reactive-streams Publisher from your REST end point to make them execute asynchronously automatically.

E.g. Using Future from cyclops-react

   @GET
   public Future<String> myEndPoint(){
          return Future.of(()->{
                                        sleep();
                                        return "hello world!";
                                        }, Executors.newFixedThreadPool(1));
   }

Would be equivalent to the following code

 @GET
 public void myEndPoint(@Suspended AsyncResponse asyncResponse){
      Future.of(()->{
                                           sleep();
                                           asyncResponse.resume("hello world!");
                                           return 1;
		}, Executors.newFixedThreadPool(1));
}

Why Microserver?

Microserver is a plugin engine for building Spring and Spring Boot based microservices. Microserver supports pure microservice and micro-monolith development styles. The micro-monolith style involves packaging multiple services into a single deployment - offering developers the productivity of microservice development without the operational risk. This can help teams adopt a Microservices architecture on projects that are currently monoliths.

Microserver plugins are orthogonal to Microservices. They solve a common problem in Microservice development whereby services are broken up and deployed separately but the code remains entangled in a monolithic common library. By making use of a plugin system that follows the same modular architectural principals as microservice development, teams can keep cross-service concerns and infrastructure in properly size, coherent and cohesive plugin modules.

Tutorial and overview

Tutorial

Tutorial code

Note on Fat Jars

Microserver (& Cyclops) have a plugin architecture and make use of the Java Service Loader mechanism. Make sure your Fat Jar implementation is configured to aggregate services. With the Gradle Shadow Jar you do this with

   shadowJar {
     mergeServiceFiles()
   }

Quick start youtube video

Getting started video

Note the main launch class has been changed from MicroServerStartup to MicroserverApp

Blurb

Microserver is a zero configuration, standards based, battle hardened library to run Java Rest Microservices via a standard Java main class. It has been used in production in AOL since July 2014.

Get Microserver

Build health

  • micro-grizzly-with-jersey Maven Central
  • micro-tomcat-with-jersey Maven Central
  • micro-core Maven Central
  • micro-boot : Microserver driving Spring Boot Maven Central
  • micro-spring-boot : Spring Boot driving Microserver Maven Central

Info

wiki

Google Group

Example Apps : Microserver Core with Grizzly and Jersey

Example Apps : Microserver Boot

Java Doc : Microserver Core

Java Doc : Microserver Boot

Maven dependency

Microserver Grizzly with Jersey

   <dependency>
     <groupId>com.oath.microservicesgroupId>
     <artifactId>micro-grizzly-with-jerseyartifactId>
     <version>x.yzversion>
   dependency>

Microserver Spring Boot

   <dependency>
     <groupId>com.oath.microservicesgroupId>
     <artifactId>micro-spring-bootartifactId>
     <version>x.yzversion>
   dependency>

Gradle dependency

Microserver core

    compile group: 'com.oath.microservices', name:'micro-core', version:'x.yz'

Microserver Spring Boot

     compile group: 'com.oath.microservices', name:'micro-spring-boot', version:'x.yz'

Tech Stack

Microserver core is a lightweight server configuration engine built using Spring, Cyclops and Jackson.

Zero Configuration

No directory structure is imposed by the server and no XML is required. There is no framework config. Just a jar file and your application. You can, of course, configure your application without limit.

Example working application :-

The main class :-

     public class AppRunnerTest {

		
		public static void main(String[] args) throws InterruptedException {
			new MicroserverApp(() -> "test-app").run();
		}

    }

This will deploy a REST server on port 8080 (configurable by test-app.port in application.properties), it will also automagically capture any Rest end points (Spring & Jersey annotations) that implement the tag interface RestResource (see below for an example).

A rest end point

@Rest
@Path("/status")
public class StatusResource {

    @GET
    @Produces("text/plain")
    @Path("/ping")
    public String ping() {
        return "ok";
    }

}

Configuration Options

If you find you need configuration options for your application you have two options.

  1. Override some of the available options on the Module interface (ConfigurableModule provides a builder mechanism for this)
  2. Implement a custom plugin (the cleanest option, which also promotes reuse across services).

Application configuration (for Grizzly with Jersey)

The core of Microserver is a Spring 4.x Dependency Injection container which is used to store all the main classes of your Microservice (s). The Spring Dependency Injection container can be configured by the @Microservice Annotation on your main class, or by the Config object (optionally passed as a parameter to startup).

Micro-monolith Architectural Overview

Each Microservice is a Jersey REST Application, these can be deployed independently as pure Microservices or together as a micro-monolith. Multiple Microservices can run on the same server, by adding them to the classpath at runtime. They share a common Spring Dependency Injection container (as they are smaller services, we feel it makes sense to share resources such as ThreadPools, Datasources etc), but act as totally separate Rest applications.

When creating embedded Microservices (multiple services colocated on the same JVM and Spring container), the development project should be independent, but the colocated instances should be tested as they will be deployed in production. There will be more info to follow on the wiki, on how and why we have implemented and scaled this pattern (the goal is to achieve both the benefits of a full Microservice architecture, but minimise the costs as articulated by Robert (Uncle Bob) C. Martin and others - e.g. here: Microservices and Jars .

Jersey REST Applications are configured by the Module interface (at least one of which must be specified on startup).

high level architecture

Rest configuration

The configuration of your Rest endpoints can be managed via the Module interface. The Module interface has a number of Java 8 default methods and a single abstract method (getContext). It behaves as a functional interface, and can be defined by a lambda expression. When used in this way the lambda represents the context the Microserver will create Rest end points on.

e.g.

   new MicroserverApp(() -> "context").start();

() -> "context" is a Module!

Configurable Options

Module provides the following default methods, that clients can override

   default Map<String,String> getPropertyOverrides(){
   	return Maps.newHashMap();
   }
   default Set<Class> getSpringConfigurationClasses(){
   	return Sets.newHashSet(Classes.CORE_CLASSES.getClasses());
   }
   default List<Class> getRestResourceClasses() {
   	return Arrays.asList(RestResource.class);
   }
   default List<Class> getRestAnnotationClasses() {
   	return Arrays.asList(Rest.class);
   }
   
   default List<String> getDefaultJaxRsPackages(){
   	return Arrays.asList("com.wordnik.swagger.sample.resource",
   			"com.wordnik.swagger.sample.util"	);
   }
   
   default List<Class> getDefaultResources(){
   	return Arrays.asList(JacksonFeature.class, 
   			//SWAGGER CLASSES
   			ApiListingResourceJSON.class,JerseyApiDeclarationProvider.class,
   			JerseyResourceListingProvider.class);
   }
   
   default List<ServletContextListener> getListeners(ServerData data){
   	return ImmutableList.of(new ContextLoaderListener(data
   			.getRootContext()),
   			new JerseySpringIntegrationContextListener(data),
   			new SwaggerInitializer(data));
   }
   default Map<String,Filter> getFilters(ServerData data) {
   	return ImmutableMap.of("/*",new QueryIPRetriever());
   }
   default Map<String,Servlet> getServlets(ServerData data) {
   	return ImmutableMap.of();
   }
   
   default  String getJaxWsRsApplication(){
   	return JerseyRestApplication.class.getCanonicalName();
   }
   default String getProviders(){
   	return "com.aol.micro.server.rest.providers";
   }

RestResource class defines the tag interface used to identify Rest end points for this module.

Filters provides a map of Servlet filters and the paths to which they should be applied

Providers allows client code to change the Jersey Providers packages

JaxWsRsApplication allows client code to completely override the Microserver jax.ws.rs.Application

Property file configuration

Microserver supports auto-discovery of application.properties. Microserver will assume a default file name of 'application.properties'. Microserver will check for a properties in the following order

  1. System property 'application.property.file' and if present will load the property file from disk using that.

  2. Otherwise, Microserver will look for a System Property 'application.env' and will load the application property file from the classpath using the resource name 'application-${application.env}.properties.

  3. Alternatively, Microserver will load application.properties directly from the classpath.

  4. If still not found Microserver will load application.properties from disk in the current directory

The default file name application.properties can be configured by exception (use PropertyFileConfig.setApplicationPropertyFileName(String filename).

Microserver application properties loading is configured by the class PropertyFileConfig. You can replace this with your own Spring configuration file to load property files by a different set of rules (by passing in your class to the constructor of Microserver).

Embed and colocate Microservices

Microserver supports the embedding of multiple microservices within a single Microserver, this is not the default mode of operation and involves a little more work to setup. All Microservices will share a single Spring context, so some care needs to be taken when authoring such Microservices to avoid conflicts. This does mean that they can share resources (such as database connections) where it makes sense to do so.

Embedded microservices should be collated at '''runtime only'''. There should be no compile time dependency between embedded microservices (otherwise you are not building microservices but a monolithic application).

Embedding microservices is an optimisation that allows better performance, enhanced robustness and reliability and easier management of microservices - while still maintaining the advantages of horizontal scalability offered by the microservices approach.

Embedded Microservices example

This example will start two different Rest endpoints - one on context "test-app" and another on context "alternative-app". "test-app" will automagically wire in any Jersey endpoints that implement TestAppRestResource. "alternative-app" will automagically wire in any Jersey endpoints that implement AltAppRestResource.

   @Microserver
   public class EmbeddedAppRunnerTest {
   
   	public static void main(String[] args) throws InterruptedException {
   		new MicroserverApp(EmbeddedAppRunnerTest.class, 
   				new EmbeddedModule(TestAppRestResource.class,"test-app"),
   				new EmbeddedModule(AltAppRestResource.class,"alternative-app")).start();
   	
   		
   	
   	}
   }

Building a 'fat' Jar

We recommend the Gradle plugin Shadow Jar. For Gradle 2.0 simply define it in your plugins section ->

plugins {
 id 'java' // or 'groovy' Must be explicitly applied
 id 'com.github.johnrengelman.shadow' version '1.2.0'
}

Maven users can use Shade plugin or equivalent (Maven assembly plugin).

Thanks to our Sponsors

Comments
  • Generating a war instead of executable jar

    Generating a war instead of executable jar

    We are running a server containing other .war services and we would like to include services created with micro-server as well. Is it possible to generate .war instead of .jar? I know it's possible from spring-boot (https://spring.io/guides/gs/convert-jar-to-war/) , so maybe there is a way to do it using the microboot plugin ?

    Thanks guys!

    help wanted question 
    opened by marcocast 16
  • typo in pom.xml leads to not being able to build Eclipse project

    typo in pom.xml leads to not being able to build Eclipse project

    In the pom.xml hosted on Maven central, the dependency for jackson-jaxrs-providerhas a typo:

    com.fasterxml.jackson.jaxrs jackson-jaxrs-providers ^^ The artifactId should be 'jackson-jaxrs-provider' - Eclipse shows an error: Missing artifact com.fasterxml.jackson.jaxrs:jackson-jaxrs-providers:jar:2.2.3

    Could someone fix this and upload a new pom to Maven central? TIA (thanks-in-advance)

    opened by mwnorman 13
  • IncorrectJaxRsPluginsException: ERROR!  No jax-rs application plugins found

    IncorrectJaxRsPluginsException: ERROR! No jax-rs application plugins found

    I am using Microboot- hoping to leverage SpringBoot and use the Grizzly server too. I am getting the following error:

    Exception in thread "My-Web-Service" com.aol.micro.server.module.IncorrectJaxRsPluginsException: ERROR! No jax-rs application plugins found at com.aol.micro.server.servers.JaxRsServletConfigurer.addServlet(JaxRsServletConfigurer.java:25) at com.aol.micro.server.servers.grizzly.GrizzlyApplication.run(GrizzlyApplication.java:69) at com.aol.micro.server.servers.ServerRunner.lambda$start$54(ServerRunner.java:69) at com.aol.micro.server.servers.ServerRunner$$Lambda$85/1192603187.run(Unknown Source)

    I have this application class sitting in the base package: @Microboot public class App {

    public static void main(String[] args) {
    
        new MicroserverApp(() -> "My-Web-Service").start();
    }
    

    }

    I have my web service define like this in a sub package: @Rest @Path("/my-web-service") public class MyWebService { ... }

    When I run the App I can see promising logs like these: 2016-03-02 18:55:04,276 INFO [main] c.g.o.r.e.t.a.App [StartupInfoLogger.java:57] Started App in 11.605 seconds (JVM running for 13.857) 2016-03-02 18:55:04,298 DEBUG [main] o.s.b.f.s.DefaultListableBeanFactory [AbstractBeanFactory.java:251] Returning cached instance of singleton bean 'myWebService'

    However, I also get the above error and my web service does not respond http requests.

    Any ideas how to solve this problem?

    Thanks

    opened by ghost 7
  • RestAnnotationClasses not available in ConfigurableModule

    RestAnnotationClasses not available in ConfigurableModule

    Per the docs for the most recent micro-server, a way to add annotation classes should be available in ConfigurableModule:

    default List getRestAnnotationClasses() { return Arrays.asList(Rest.class); }

    However, as of micro-server-0.5.8, there doesn't appear to be any way to add annotation classes via ConfigurableModule:

    https://github.com/aol/micro-server/blob/master/micro-core/src/main/java/com/aol/micro/server/module/ConfigurableModule.java

    opened by cbelkas 6
  • Trying to access Jersey ResourceConfig when using micro-server

    Trying to access Jersey ResourceConfig when using micro-server

    Our team is using micro-server, and I'm trying to register an annotation for us to use with our authentication solution.

    Is there a way to access the ResourceConfig (in com.aol.micro.server.rest.Jersey.JerseyRestApplication.java) when using the micro-server code?

    help wanted question 
    opened by cbelkas 5
  • com.aol.micro.server.auto.discovery.Rest doesn't work

    com.aol.micro.server.auto.discovery.Rest doesn't work

    ref my gist (https://gist.github.com/mwnorman/ed36b3c772d1973dcf1a) I have created a simple test app ... my HelloResource is not being auto-magically discovered:

    http://localhost:8080/simple/foo/hello Resource identified by path '/simple/foo/hello', does not exist.

    Am I missing something?

    opened by mwnorman 5
  • Can't make it work in a Groovy script

    Can't make it work in a Groovy script

    Hi!

    This looks like a very nice project. By its simplicity I started trying to write a Groovy script but couldn't make it work due to the lambda used on the init method.

    I tried something like this:

    @Grab('com.aol.microservices:micro-core:0.62')
    
    import com.aol.micro.server.*
    import com.aol.micro.server.auto.discovery.*
    import javax.ws.rs.*
    
    @Rest
    @Path("/status")
    class StatusApp {
    
        static void main(String[] args){
            def init = { -> "status-app"}
            def app = new MicroserverApp(init)
            // also tried like this
            //def app = new MicroserverApp({ -> "status-app" })
            app.run()
        }
    
        @GET
        @Produces("text/plain")
        @Path("/ping")
        String respondToPing() {
            return "pong!"
        }
    }
    

    I know this is probably related to how Groovy handles Java 8 lambdas (I've been Googling but can not find a way to use a Groovy closure as a Java lambda for this case). What would be the best approach to make this script work?

    Any help or pointers in the right direction would be very appreciated.

    Thanks

    opened by jeancarlozapata 4
  • JacksonUtil not working in version 0.62

    JacksonUtil not working in version 0.62

    The previous com.aol.micro.server.rest.JacksonUtil has been replaced by com.aol.micro.server.rest.jackson.JacksonUtil, but when running a simple json conversion (working with 0.59) I get the following error :

    java.lang.NoClassDefFoundError: com/aol/cyclops/lambda/monads/SequenceM at com.aol.micro.server.PluginLoader.load(PluginLoader.java:21) at com.aol.micro.server.PluginLoader$$Lambda$1/1282287470.get(Unknown Source) at com.aol.cyclops.lambda.utils.LazyImmutable.setOnceFromSupplier(LazyImmutable.java:116) at com.aol.cyclops.lambda.utils.LazyImmutable.computeIfAbsent(LazyImmutable.java:133) at com.aol.cyclops.functions.Memoise.lambda$memoiseSupplier$109(Memoise.java:27) at com.aol.cyclops.functions.Memoise$$Lambda$2/2104028992.get(Unknown Source) at com.aol.micro.server.rest.jackson.JacksonUtil.getMapper(JacksonUtil.java:39) at com.aol.micro.server.rest.jackson.JacksonUtil.serializeToJson(JacksonUtil.java:63) at com.ucd.geoservices.model.QueryRadiusRequestTest.testJson(QueryRadiusRequestTest.java:36) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: java.lang.ClassNotFoundException: com.aol.cyclops.lambda.monads.SequenceM at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 32 more

    Is cyclops already part of the micro-server-core?

    opened by marcocast 4
  • Add editorconfig for code style consistency. Format gradle files base…

    Add editorconfig for code style consistency. Format gradle files base…

    Code Changes:

    • Add .editorconfig.
    • Format current gradle files (only). Future reviews will include production code.
    • Rename README files to follow standards.
    • Add gradle wrapper distribution.
    • Add license file. Apache License Version 2.0
    • Gradle wrapper update to version 2.14.1 with compileOnly dependency strategy (lombok)
    opened by quike 3
  • Spring JDBC ROMA New Version

    Spring JDBC ROMA New Version

    Hi, I had released new version of ROMA (https://github.com/serkan-ozal/spring-jdbc-roma-impl) with new features and performance improvements long time ago. As far as I see, this project uses its old version so I think, it would be better to use new version.

    enhancement 
    opened by serkan-ozal 3
  • roadmap of micro server

    roadmap of micro server

    can someone share the roadmap of micro server? will we add following features?: 1.circuit breaker 2.service bus 3.service monitor 4.service cluster and loadbalance

    question 
    opened by XuJun0909 3
  • Add GarbageCollectorMXBean to micro-jmx-metrics

    Add GarbageCollectorMXBean to micro-jmx-metrics

    In order to monitor gc metrics programmatically, the following java.lang type should be added to the micro-jmx-metrics plugin https://docs.oracle.com/javase/7/docs/api/java/lang/management/GarbageCollectorMXBean.html The intent is to plot two metrics:

    • CollectionCount: Number of GC collections triggered since JVM start
    • CollectionTime: Accumulated collection time spent in seconds since JVM start
    opened by davidartplus 0
  • Work as pure Microservices Plugin offering for Spring Boot

    Work as pure Microservices Plugin offering for Spring Boot

    e.g. to pull in all Microserver plugins on the classpath into a pure Spring Boot Application

    
    SpringApplication.run(new MicroserverPlugins().classes(),new String[0]);
    
    opened by johnmcclean 0
Releases(v1.2.6)
LINE 4.1k Jan 2, 2023
Cloud native multi-runtime microservice framework

Femas: Cloud native multi-runtime microservice framework Show me femas username:admin password:123456 If you like,star fork it and join us English | 简

PolarisMesh 352 Apr 23, 2022
Takin is an Java-based, open-source system designed to measure online or test environmental performance test for full-links, Especially for microservices

Takin is an Java-based, open-source system designed to measure online environmental performance test for full-links, Especially for microservices. Through Takin, middlewares and applications can identify real online traffic and test traffic, ensure that they enter the right databases.

ShulieTech 1.2k Dec 21, 2022
Temporal is a microservice orchestration platform which enables developers to build scalable applications

Temporal is a microservice orchestration platform which enables developers to build scalable applications without sacrificing productivity or reliability. Temporal server executes units of application logic, Workflows, in a resilient manner that automatically handles intermittent failures, and retries failed operations.

temporal.io 5.9k Jan 1, 2023
Lightweight framework for building java microservices

Ja-micro Ja-micro is a lightweight Java framework for building microservices. Introduction Ja-micro is a framework that allows developers to easily de

Sixt 621 Aug 21, 2022
WSO2 Microservices Framework for Java (MSF4J)

Build status: WSO2 Microservices Framework for Java (MSF4J) WSO2 Microservices Framework for Java (MSF4J) is a lightweight high performance framework

WSO2 359 Dec 27, 2022
Sample application demonstrating an order fulfillment system decomposed into multiple independant components (e.g. microservices). Showing concrete implementation alternatives using e.g. Java, Spring Boot, Apache Kafka, Camunda, Zeebe, ...

Sample application demonstrating an order fulfillment system decomposed into multiple independant components (e.g. microservices). Showing concrete implementation alternatives using e.g. Java, Spring Boot, Apache Kafka, Camunda, Zeebe, ...

Bernd Ruecker 1.2k Dec 14, 2022
Source Code for 'Pro Java Microservices with Quarkus and Kubernetes' by Nebrass Lamouchi

Apress Source Code This repository accompanies Pro Java Microservices with Quarkus and Kubernetes by Nebrass Lamouchi (Apress, 2021). Download the fil

Apress 24 Oct 31, 2022
A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)

Sentinel: The Sentinel of Your Microservices Introduction As distributed systems become increasingly popular, the reliability between services is beco

Alibaba 20.4k Dec 31, 2022
ColocationSim: Simulate Colocation Datacenter in a Fine Granularity with Microservices and Interference Modeling

ColocationSim Introduction 将在线作业和离线作业混合部署在同一集群(简称混部,Colocation)提升数据中心资源利用率的主流方法,如何在保证在线作业性能的前提下最大化集群的资源利用率成为混部相关研究中最主要问题。混部作业调度算法从集群层面解决这一问题,是学术界、企业界的

null 93 Jan 4, 2023
KBE Spring Boot Microservices

SFG Beer Works - Brewery Microservices This project has a services of microservices for deployment via Docker Compose and Kubernetes. You can access t

John Thompson 29 Nov 2, 2022
Govern Service is a lightweight, low-cost service registration, service discovery, and configuration service SDK.

Govern Service is a lightweight, low-cost service registration, service discovery, and configuration service SDK. By using Redis in the existing infrastructure (I believe you have already deployed Redis), it doesn’t need to bring extra to the operation and maintenance deployment. Cost and burden. With the high performance of Redis, Govern Service provides ultra-high TPS&QPS (10W+/s JMH Benchmark).

Ahoo Wang 61 Nov 22, 2022
CoSky is a lightweight, low-cost service registration, service discovery, and configuration service SDK.

High-performance, low-cost microservice governance platform. Service Discovery and Configuration Service

Ahoo Wang 61 Nov 22, 2022
A simplistic configuration API

Config API This is just a simple configuration API I made a while back because I needed one, code is pretty outdated. Current Supported Data Types We

null 5 Nov 21, 2021
Drone Service REST API in Spring boot

Drones Service REST API ?? START Introduction There is a major new technology that is destined to be a disruptive force in the field of transportation

Moses-K 1 Feb 4, 2022
Apache Dubbo is a high-performance, java based, open source RPC framework.

Apache Dubbo Project Apache Dubbo is a high-performance, Java-based open-source RPC framework. Please visit official site for quick start and document

The Apache Software Foundation 38.3k Jan 9, 2023
Opinionated libraries for HTTP&JSON-based RPC using Retrofit, Feign, OkHttp as clients and Jetty/Jersey as servers

Conjure Java Runtime (formerly http-remoting) This repository provides an opinionated set of libraries for defining and creating RESTish/RPC servers a

Palantir Technologies 76 Dec 13, 2022
Annotation/Reflection Based Bukkit Command API. Containing many features such as help-service, command providers, tab completion, and many more!

CommandAPI Annotation/Reflection Based Command API that just does what you want it to do without any problems. Importing Maven <repository> <id>

damt 1 Jun 13, 2022
High Performance Inter-Thread Messaging Library

LMAX Disruptor A High Performance Inter-Thread Messaging Library Maintainer LMAX Development Team Support Open a ticket in GitHub issue tracker Google

LMAX Group 15.5k Dec 31, 2022