- What is the difference between Proteus and Scalecube (http://scalecube.io/)?
- If Proteus is better than Scalecube, why it is better?
- Can the Proteus broker run as part of every client/server (JVM) and thus create mesh network of services?
What is the difference between Proteus and Scalecube?
Proteus is built from the ground up to take all of the advantages provided by the new RSocket protocol and provide a simple and easy-to-use development and operations experience. Proteus provides the developer with: service discovery, predictive load-balancing, MPLS-esque routing at the application layer, access control lists, and an RPC mechanism for communicating between services.
Proteus accomplishes all of this by blurring the lines between client and services. Everything connects into the Proteus broker, whether it is a client, a service, or both. Scalecube is broker-less, this can have some advantages, but we have made a conscious choice to have a broker because as you will soon see it offers a ton of advantages.
If Proteus is better than Scalecube, why is it better?
Easily share strong contracts among your development teams. No more keeping swagger documents up to date or getting swagger documents from other teams that don’t match their current api. With Proteus, developers define their APIs in a Protobuf IDL and then code can be generated in any language to call that API.
Because everything connects into the Proteus brokers you do not need to open any ports in order to use Proteus. This drastically reduces the attack surface of applications.
Proteus supports ACLs to control which services can talk to each other. These ACLs work across web, mobile, and backend services.
- Scalecube uses swim for service discovery which means that every member must be able to access other members. This is a security risk and also will not work in web and mobile applications. Because everything connects into the Proteus broker service discovery works across web, mobile, lambdas, microservices and IoT devices.
Can the Proteus broker run as part of every client/server (JVM) and thus create a mesh network of services?
Most “service meshes” are proxies talking to other proxies which are generally setup as sidecars. Proteus on the other hand is a true mesh. The client connects to multiple brokers in a cluster, the brokers in turn create multiple connections amongst themselves, and load balancers are used to determine the healthiest, most performant, route to send a request.
We are also working on a shared memory configuration of Proteus that will automatically use shared memory to communicate between services on the same instance without any configuration on the part of the developer.