Happy Coding, Happy Life

微服务实战(2) - 目标系统

| Comments

[如需转载,请联系本人]

过去的几个月,我作为独立咨询师,为多个传统企业提供了微服务架构的培训、咨询以及交付工作。在这些企业中,大部分的开发者对微服务的理解,以“银弹观念”为主。实际上,传统企业在过去多年的业务积累中,由于组织架构、业务发展和市场竞争等综合因素,技术体系相对封闭,缺乏快速交付的理念。因此,微服务的出现,加之社区的热捧,导致这种现象出现也是比较能理解的。

经过2015年的快速普及,微服务的优势被越来越多的传统组织和企业所认可,但由于架构相关的知识本身比较抽象,虽然各大会议上有很多互联网公司的案例分享,但开发者似乎依然很难全面了解微服务架构。

所以,希望通过本系列的文章,以一个模拟的案例为背景,以持续交付和DevOps为主线,帮助初学者理解微服务架构,并能通过动手实验,了解相关的实践以及方法论。

精彩课程已经出炉,请移步这里

目标系统

构建一个用户查看活动、报名活动、接收通知的系统

  • 匿名用户可查看活动列表
  • 匿名用户可以查看活动详情
  • 匿名用户可以查看相关活动推荐和评论
  • 用户登陆成功后完成报名
  • 报名成功,用户获取通知

服务定义

关于服务的划分,是一个非常有深度的话题,与业务场景、技术实现、团队能力有着密不可分的关系。 从方法论上有:

  • 根据DDD,包括业务上下文、事件驱动、读写分离等
  • 根据名词类对象,譬如商品、订单等
  • 根据动词类行为,譬如支付,预订等
  • 其他切入点

在这个模拟场景中,为了保持简洁,我假定使用名词和动词进行划分,包括如下:

  • 活动服务Event-service(提供活动的列表和活动详情的相关数据)
  • 推荐服务Recommendation-service(提供与某个活动相关的推荐信息)
  • 评论服务Review-service(提供与某个活动相关的评论信息)
  • 活动聚合服务Event-composite-service(聚合服务 - 提供某个活动及其相关的推荐、评论信息
  • 报名服务Enroll-service(为登录用户提供报名)
  • 通知服务Notification-service(用户报名成功后获取通知)

该活动报名系统的应用架构图如下:

服务实现

  • Java 8/Gradle 2.13
  • SpringBoot 1.4.2 / SpringCloud Camden.SR2
  • MongoDB 使用Document存储活动数据
  • REST/HAL/HAL-Browser 定义服务之间通信的接口
  • JVM-Pact 实现契约测试,服务间接口的测试

服务支撑组件

  • Netflix OSS Eureka 实现服务注册
  • Spring Cloud Config 实现服务的配置
  • Hystrix/Turbine 实现断路器
  • Zuul 实现API网关
  • Spring Cloud Security 实现安全

基础设施

  • ELK 提供服务的日志的聚合服务
  • Prometheus 提供服务的监控与告警
  • Jenkins 2.0搭建系统的持续交付流水线
  • Docker提供服务的打包以及发布
  • Rancher提供Docker的轻量级管理方案

该活动报名系统的微服务生态系统图如下:

总结

通过理论+模拟+实战的方式,梳理微服务的生态系统,并以持续交付和DevOps的实施为主线,体 系化的形成微服务从0到1的学习过程。

关于课程,请看这里

Comments