Your SlideShare is downloading. ×
  • Like
AtmosphereConf - Let's build a solid base for a scale
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

AtmosphereConf - Let's build a solid base for a scale

  • 149 views
Published

 

Published in Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
149
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. @DebskiChris #AtmosphereConf Krzysztof Dębski Allegro Group Let’s build a solid base for a scale
  • 2. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Agenda The Allegro Situation How to build a new World? The way to improve What’s in it for you?
  • 3. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris The Allegro Situation
  • 4. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Allegro
  • 5. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Allegro 6 million LOC
  • 6. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY 400 people in IT Allegro
  • 7. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris A New Hope
  • 8. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY A New Hope
  • 9. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY A New Hope
  • 10. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY A New Hope? Service Oriented Ambiguity
  • 11. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Domain Driven Design
  • 12. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris (Micro)Services
  • 13. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Business needs Offer User Transaction
  • 14. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Offer User Transaction Independent
  • 15. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services API Offer User Transaction
  • 16. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Polyglot Cassandra MongoDB Oracle Offer User Transaction
  • 17. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY (Micro)Services Smart Endpoints Cassandra MongoDB Oracle Offer User Transaction
  • 18. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY The first approach Service Auto deployable Monitored Auto scalable Auto healable Auto discoverable
  • 19. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris How to build a new World?
  • 20. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY The first project Gradle Spring External Jetty server
  • 21. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Let’s REST JAX-RS / JSR Compliant @Path("/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 22. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Let’s expose our methods Swagger @Path("/users") @Api(value = "/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @ApiOperation(value=“Get all users”, response=UserCollectionResponse.class) @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 23. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Let’s expose our methods Swagger
  • 24. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper   Register  
  • 25. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper   Get  User  
  • 26. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper   Get  User  
  • 27. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY And make them discoverable Offer User Discovery ZooKeeper   Get  User   Get  offer  for  user  
  • 28. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Multiple API versions Header support public class UserMediaType { public static final String V1_JSON = "application/vnd.allegro.user.v1+json” public static final String V2_JSON = "application/vnd.allegro.user.v2+json” } curl --dump-header - -H ”Accept: application/vnd.allegro.user.v2+json" -X GET http://localhost:8080/users
  • 29. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Multiple API versions Content negotiation @Path("/users") @Consumes(AllegroUserMediaType.V1_JSON) @Produces(AllegroUserMediaType.V1_JSON) public class UsersEndpoint { // [...] @GET @Produces(AllegroUserMediaType.V2_JSON) public UserCollectionResponse findAllUsers() { //[...] } }
  • 30. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris How to configure it?
  • 31. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY How to configure it? Zookeper Environment properties Command-line options
  • 32. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris And it became slow
  • 33. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Lower startup time External Jetty Embedded Jetty Embedded UnderTow
  • 34. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Easier deployment Cargo deployment Built to zip package On immutable images
  • 35. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris Tests
  • 36. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Do you test your tests? Pitest
  • 37. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Integration tests Test without mocks Run from IDE public class UsersIntegrationTest { private static Map<String, String> overrideConfiguration = Maps.newHashMap(); static { overrideConfiguration.put("property.name", "This was overwritten value"); } @ClassRule public static final RestServiceStarted DEPLOYED_SERVICE = new RestServiceStarted(overrideConfiguration); private WebTarget getUsersResourceWebTarget() { return DEPLOYED_SERVICE.getWebTarget().path("users"); } }
  • 38. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris Monitoring
  • 39. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Let’s see what happens LogStash Kibana NxLog
  • 40. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Let’s see what happens Graphite # Metrics metrics.reporters.graphite.enabled=true metrics.reporters.graphite.host=graphite.service metrics.reporters.graphite.port=2003 metrics.reporters.graphite.prefix=stats.Prod.service metrics.reporters.interval=30
  • 41. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris Monolith Alert
  • 42. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Monolith Alert Multi module project support
  • 43. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris The way to improve
  • 44. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Authentication OAuth2
  • 45. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Patch Support Standardized by IETF https://tools.ietf.org/html/rfc6902 PATCH /user/1 HTTP/1.1 Host: user.service.local Content-Length: 312 Content-Type: application/json-patch+json [ {”op”: ”test”, ”path”: ”/firstname”, ”value”: ”Jane”}, {”op”: ”add”, ”path”: ”/maidenname”, ”value”: ”Smith”}, {”op”: ”replace”, ”path”: ”/lastname”, ”value”: ”Doe”}, {”op”: ”remove", ”path”: ”/meetings”}, {”op”: ”move”, ”from”: ”/balance”, ”path”: ”sharedbalance”}, {”op”: ”copy”, ”from”: ”/a”, ”path”: ”/b”} ]
  • 46. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Simplify annotations Swagger? @Path("/users") @Api(value = "/users") @Consumes(CONTENT_TYPE_JSON) @Produces(CONTENT_TYPE_JSON) public class UsersEndpoint { // [...] @ApiOperation(value=“Get all users”, response=UserCollectionResponse.class) @GET public UserCollectionResponse findAllUsers() { //[...] } }
  • 47. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Deployment Docker support
  • 48. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris What’s in it for you?
  • 49. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Use the latest tools GradleW issue in Continuous Integration Environment and parent POM issues. Don’t do DDOS yourself and your partners’ sites.
  • 50. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Change is the only constant HTTP Server Service API provider Dependency injection engine Deployment tools
  • 51. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Focus on right metrics import org.junit.Test; import static net.trajano... public class MediaTypesTest { @Test public void mediaTypesShouldBeValidUtilityClasses() throws Throwable { assertUtilityClassWellDefined(UserMediaType.class); } }
  • 52. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Tools also lie Metrics tend to lie – Default PHP metrics in SonarQube – Tested file •  4535 CLOC •  Whole code written using imperative programming How many violations are there?
  • 53. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Tools also lie How many violations are there? 4 At least according to Sonar
  • 54. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Learn to REST REST is not so obvious /api/bi/XYZ123/1 /recommendations/1/items /offer/100?output=ESI/JSON
  • 55. #AtmosphereConf @DebskiChris Allegro The New World Improvement WIIFY Community Involve all developers in building the Bootstrap. Or they will build their own tools. Łukasz Drumiński Mateusz Gajewski @wendigo
  • 56. Allegro The New World Improvement WIIFY #AtmosphereConf @DebskiChris Q & A