New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor the microservice architecture for Vert.x 3.5 #17

Open
sczyh30 opened this Issue Jan 29, 2017 · 12 comments

Comments

Projects
None yet
7 participants
@sczyh30
Copy link
Owner

sczyh30 commented Jan 29, 2017

Some plans:

  • Adapt for API changes
  • Kafka integration #2
  • Enhance global authentication (JWT based) #5
  • Enhance API Gateway (e.g. file upload, WebSocket, fault-tolerance, performance)
  • Enhance integration with Vert.x Config
  • More functional and reactive code (with RxJava 2)
  • Improve fault-tolerance architecture (e.g. Circuit Breaker for each microservice component) #19
  • Redesign for distributed transactions #22
  • Improve performance / throughput test
  • Robust health check mechanism (Maybe integrate with Vert.x Health Check) #19
  • Database middleware layer #26
  • Initial design for service orchestration
  • Distributed tracing
  • Service mesh for cloud native architecture

This can be a huge change so it may take a long time to refactor.

Update (Feb 13, 2018): Redesigning...

@sczyh30 sczyh30 changed the title Update the microservice architecture for Vert.x 3.4.0 Update the microservice architecture for Vert.x 3.4 Mar 28, 2017

@Romeh

This comment has been minimized.

Copy link

Romeh commented Apr 27, 2017

please let me know if you need any help or contribution , I have worked with vertx 3 recently with ignite in banking project , so i can help you as well

@sczyh30

This comment has been minimized.

Copy link
Owner Author

sczyh30 commented Apr 28, 2017

@Romeh Hi, can you offer some advice about the microservice architecture? (both bussiness layer and infrastructure layer is ok, e.g. the progress of checkout->payment->order changes, event sourcing with Kafka, API Gateway, module design and division, performance). Thanks a lot! :)

Any contributions are welcome!

@Romeh

This comment has been minimized.

Copy link

Romeh commented May 2, 2017

Sure , i am checking out the source code locally now and I will go through it into details to be able to provide useful feedback , i will focus on event sourcing part as i have implemented the CQRS pattern over vertx and ignite plus kafka for my last project , then we can go through the API gateway .

@Romeh

This comment has been minimized.

Copy link

Romeh commented May 2, 2017

@sczyh30 you have done an excellent job so far !! , first checks i think you have part in ur plan already , but to be more aligned with cloud mircroservices design , we need the following :

  1. distributed configuration service for your services catalog that handle service configuration per target environment , configuration should be completely separated from the service code, vertx config can be a good start.

  2. circuit breaker should cover service to service communications as well to avoid cascading domino error effect in case one of ur services is not up or down (hystrix can be used here with Rx java or reactive vertx calling style , as hystrix provide more control about the load and metrics than standard vertx CB)

  3. health checks i think needed to be replaced by vertx health check and should be located into the service discovery , plus checking into the future if we can use one of service discovery services bridges supported by vertx .

  4. we need to introduce API documentation for the REST verticals , ex swagger

  5. separation of the common dependencies and having clean BOM managment

  6. add performance logging via ELK stack in place already

  7. use kafka or file beats as the logging events shipper instead of the default TCP shipper as it will be bad performer

  8. API trust between services , using JWT could cover that

I will start now going through the event sourcing part now , and if you have any branch for that please let me know.

Thx a lot

@Romeh

This comment has been minimized.

Copy link

Romeh commented May 2, 2017

and Small question , if i need to start the same twice with different hosts as a matter of Scalability, the current service discovery implementation will support it ?

@eciuca

This comment has been minimized.

Copy link

eciuca commented Nov 23, 2017

Hi,

Is anyone still working on this? I will be building something on the current version but I am interested in the future 3.5 version too. I think I could even contribute myself but it looks to me like no one is active anymore on this repo.

Emanuel

@sczyh30 sczyh30 changed the title Update the microservice architecture for Vert.x 3.4 Refactor the microservice architecture for Vert.x 3.5 Dec 1, 2017

@sczyh30

This comment has been minimized.

Copy link
Owner Author

sczyh30 commented Dec 1, 2017

@eciuca Hi, I might be free soon and I've been planning to redesign and refactor the whole architecture. The new version is expected to be based on Vert.x 3.5 and RxJava 2. I'll start working on it once I have time.

@rdinkel

This comment has been minimized.

Copy link

rdinkel commented Dec 17, 2017

any update on the schedule? :) happy xmas

@blukhand

This comment has been minimized.

Copy link

blukhand commented Apr 17, 2018

hah, it seems that working in alibaba makes you busy. thank you for your blog about vertx.

@eciuca

This comment has been minimized.

Copy link

eciuca commented Apr 17, 2018

Meanwhile, I have started adding stuff to the BaseMicroserviceVerticle and RestMicroserviceVerticle in a private repo which I intend to make public. I added stuff like jax-rs annotation support, AWS hazelcast configuration and docker hazelcast configuration. I will maybe post an url here when I make them public. Unfortunately it won't be a fork but I'll specify that it's derived from here. I created even an archetype for a DDD oriented microservice using these.

@gvsbr74

This comment has been minimized.

Copy link

gvsbr74 commented May 23, 2018

@sczyh30
Thanks for the fantastic stuff you created.
Are you planning to create a scala version of this java application? I am learning to use Vert.x by using scala and using your app as a base and I am encountering a strange issue with ServiceDiscovery getRecords or getRecord or getRecordFuture. All these methods fail with the below error. The same code works fine in Java.

ava.lang.NullPointerException
at io.vertx.servicediscovery.types.HttpLocationConverter.fromJson(HttpLocationConverter.java:30)
at io.vertx.servicediscovery.types.HttpLocation.(HttpLocation.java:64)
at io.vertx.servicediscovery.types.impl.HttpEndpointImpl$HttpEndpointReference.(HttpEndpointImpl.java:69)
at io.vertx.servicediscovery.types.impl.HttpEndpointImpl.get(HttpEndpointImpl.java:53)
at io.vertx.servicediscovery.impl.DiscoveryImpl.getReferenceWithConfiguration(DiscoveryImpl.java:162)
at io.vertx.servicediscovery.impl.DiscoveryImpl.getReference(DiscoveryImpl.java:157)
at io.vertx.scala.servicediscovery.ServiceDiscovery.getReference(ServiceDiscovery.scala:82)

@maiziheimei

This comment has been minimized.

Copy link

maiziheimei commented May 30, 2018

hey, guys, I am going to upgrade an old project based on vertx2.6.1 to vertx3.5,... it just starts, ... it seems a lots of things to reconsider or redesign, ... Thanks for the info so far.

@sczyh30 sczyh30 added this to the 3.5.x milestone May 31, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment