O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Msa retro

377 visualizações

Publicada em

msa 해본 척 발표하기

Publicada em: Software
  • Hello! I have searched hard to find a reliable and best research paper writing service and finally i got a good option for my needs as ⇒ www.WritePaper.info ⇐
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • My brother found Custom Writing Service ⇒ www.HelpWriting.net ⇐ and ordered a couple of works. Their customer service is outstanding, never left a query unanswered.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Msa retro

  1. 1. MSA 해본 척 하기 SDS ACT Kihoon Kim
  2. 2. 김기훈 ( ki ) Samsung SDS. ACT group # role developer (spring, react, android) # language java, javascript, go # email koreakihoon@gmail.com # blog https://kihoonkim.github.io
  3. 3. 주의! 지극히 개인적인 의견입니다.
  4. 4. MSA. 개인적인 동기
  5. 5. 2014. 12 http://www.zdnet.co.kr/column/column_view.asp?artice_id=20141208090456
  6. 6. 2015. 01 https://martinfowler.com/articles/microservices.html 2014. 03
  7. 7. 2015. 08 SSA - Architecture MSA - Chris Richardson http://microservices.io/
  8. 8. 교육 내용 domain model > api design > tdd rest, event https://www.nginx.com/blog/introduction-to-microservices/ passenger dispatcher driver? ?
  9. 9. but.. 늘 하던데로.. ERD > API design > CRUD… spring mvc git, jpa, spring boot, docker, tdd…… X 개발 문화가 정말 다르다.
  10. 10. 2015. 08 ~ saas, multi tenant architecture msa, reactive system, cloud native app, 12factor spring cloud, docker elastic stack ...PoC….
  11. 11. MSA 설명할때 이 그림부터.. Scale Cube http://microservices.io/articles/scalecube.html
  12. 12. 그런데.. scale 이 필요한 곳 이 없네…?!
  13. 13. 그나마.. PoC.. 우린 모르겠고, 소스 줄테니까 한번 MSA 적용해봐.. 근데.. 소스는 copy.. package 는 도메인 단위로 잘 나눠져 있음… 하지만, class level 참조, db join, procedure….. 그보다 일단.. 로컬에 실행도 못하겠……. FAIL...
  14. 14. 단순히 기능단위로 서비스를 나눈다고 되는게 아니구나..
  15. 15. 더 공부가 필요해..
  16. 16. 아.. Culture… 아키텍처 말고 서비스 개발을 해보고 싶다
  17. 17. 조직의 동기
  18. 18. Agile Core Team PM , Designer, Developer Pairing, TDD, User centric 단순함, 피드백, 의사소통, 개선..
  19. 19. 팀 전체가 같이 변해야 한다
  20. 20. The MSA enables teams to be agile and autonomous https://blog.eventuate.io/2017/01/04/the-microservice-architecture-is-a-means-to-an-end-enabling-continuous-deliverydeployment/
  21. 21. 그래! MSA를 하자!
  22. 22. MSA란 이거지!!
  23. 23. http://lucasmatt.com/2017/08/22/spring-microservices/
  24. 24. netflix라는 고정관념을 가진채 프로젝트 시작..
  25. 25. content schedule device proxy digital signage
  26. 26. why??
  27. 27. 당연히 있어야지! vs 그렇게 까지는 필요없어!
  28. 28. 지나고나서 돌아보니 zuul, eureka, config..같은 컴포넌트나 패턴이 중요한게 아니었다
  29. 29. MSA 서비스 개발팀 이야기
  30. 30. 개발팀 vs 운영팀 Product vs Project You Aren't Gonna Need It You build You run it
  31. 31. Polyglot 필요한 곳에 적절한 언어를 선택 (해보고 싶었던 기술을 사용하라는 것이 아님) language, database… 다양할 수록 높은 성숙도를 요구함. DevOps 능력 필요 > Java, Spring-boot, MariaDB, MongoDB
  32. 32. DDD는 필수 인가? 일단 저는 잘 몰라요. 필수는 아니라고 생각.. 하지만, 좋은 개념들이 존재
  33. 33. DDD > Ubiquitous Language 서로 다른 언어(용어) 사용시 커뮤니케이션 비용이 높아진다.
  34. 34. employee employee member
  35. 35. DDD > Bounded Context https://martinfowler.com/bliki/BoundedContext.html
  36. 36. DDD > Context map https://www.slideshare.net/StijnVolders/context-mapping • Partnership • Customer/Supplier • Conformist • Shared Kernel • Anti-Corruption Layer • Big Ball of Mud • Separate Ways https://www.slideshare.net/crishantha/domain-driven-design-and-hexagonal-architecture
  37. 37. ACID 를 달성하기 어렵다 MSA는 기본적으로 분산환경이다. 모든 서비스는 network 상에 존재한다. 2PC는 복잡하다. @transaction 마법은 통하지 않는다. > Eventual Consistency https://www.slideshare.net/koreakihoon/microservices-event-driven-architecture service A maria db service B mongo db service C mongo db api gateway
  38. 38. Configuration Server application-local.yml application-test.yml application-prod.yml application-staging.yml …… 환경 설정만 변경했는데.. 재배포, 재빌드…?!?!
  39. 39. Cloud 비용 AWS api test, web test, prod, staging……….. 환경이 늘어나고 서비스 개수가 늘어날때마다 클라우드 비용이 올라감 테스트 환경은 일단 로컬에… 느리지만 Heroku는 무료...
  40. 40. 빛은 생각보다 느리다 Region aws seoul region ←→ heroku us region Api call GET /something/# 50ms 100번호출하게 로직을 작성한다면?
  41. 41. IO는 더 느리다 자주 변하지 않는 데이터라면 cache 서비스간 공유되야 한다면 redis 로컬 캐시도 괜찮다면 ehcache A service B service cache cache
  42. 42. 서비스와 UI모델이 다르다 api spec 을 ui, service 같이 결정해야 됨 하나의 타겟을 잡고 거기에 맞게 api를 개발하고 다른 ui가 생기는 경우 mediator layer를 두는 것이 좋은 듯 service UI service UI service UI converter converter converter
  43. 43. 다른 서비스의 변경에 영향을 받는다 대부분 customer/supplier 관계 upstream - supplier downstream - customer AC test at upstream https://www.slideshare.net/shadrik/domain-driven-design-52410778 consumer driven contract test
  44. 44. Local test가 힘들다 내 서비스는 local 환경 다른 서비스는 test 환경 전체 정합성도 깨짐 “test 환경 data 좀 다 지울게요” <local> service service service db, mq
  45. 45. 테스트 전략 + 자동화 unit test : 클래스 레벨, 주로 의존관계에 있는 클래스는 mocking. functional test : 서비스 레벨, 다른 서비스의 API or Message queue는 stubbing. 자신의 서비스 내에서는 end-to-end (api호출 ~ database까지) contract test : 서비스간 api 사용하는 spec만 테스트 integration test : 실제 테스트 환경에서 실행. 전체 서비스와 database, rest api, message queue 등 모두 실제로 흐름 C
  46. 46. 서비스가 죽어 있다 개발환경은 HA 구성 X, blue - green 배포 X 즉, 재배포 할 때마다 잠깐씩 service 가 down 혹은 EC2 하나에 모든 서비스를 넣어 둔 경우, 특정 서비스가 자원을 모두 사용 실제 운영 환경에서도 다양한 문제로 서비스가 장애 날 수 있음! Circuit Breaker 를 사용해서 장애 전파를 막음 비즈니스에 상황에 맞게 fallback 정책을 적용
  47. 47. Orchestration vs Choreography Smart endpoints and dumb pipes 하지만, choreography도 service chain이 길어지면 관리가 힘들어짐 응집도 높은 서비스를 만들어야 함. Service registration/discovery : Eureka Service monitoring : Sleuth, ELK
  48. 48. Information Expert data를 제일 잘 아는 서비스가 누구야?! schedule <when> content <what> how??
  49. 49. 점점 거대해 지는 Micro Service 서비스를 둘로 분리하거나 새로운 서비스를 만드는 것은 git repository, build pipeline, 배포 환경 등등.. 손이 많이 가는 작업(돈도…) 그러다보니, 새로운 서비스로 만들지 않고 기존 서비스에 기능을 계속 추가 여러개의 monolithic service가 생겨나기 시작 서비스를 나누는 것은 큰 용기가 필요함!
  50. 50. 그래서 어떻게?
  51. 51. 팀의 성숙도와 보유 기술에 따라 선택
  52. 52. 처음부터 완벽하게 보다는 필요할때 마다 조금씩 개선해 나가는 방밥으로
  53. 53. 서비스는 stateless low coupling high cohesion
  54. 54. 최종 기술 스택 > 서비스 Java8 Spring-boot-web Spring-data-jpa, QueryDSL, MaridDB, flyway Spring-cloud-stream, rabbitmq Swagger (spring-fox-swagger-ui) Test: junit, mockito, wiremock, rest-assurd, spring-cloud-contract > 공통 Spring-cloud : Zuul, Eureka, Config Server, Hystrix, OpenFeign(Ribbon), Sleuth Elasticsearch, Fluentd, Kibana Redis AWS
  55. 55. the end.

×