在决定推进项技术升级以前,我习惯先问问本身为何要作,譬如收益和付出是什么,若是没有想清楚,宁愿不作。安全
微服务也不例外,咱们不能盲目跟风,必定要结合本身的实际,慎重地决定是否须要微服务化。架构
网上关于微服务好处的介绍有不少,这里我想特别强调的是,从“人”的角度讲,微服务带来的优点和挑战。分布式
微服务架构下,每一个服务的复杂度大幅降低,从而维护成本也大幅下降。对于团队来讲,新人也能够更快地上手项目,贡献代码。交接项目也变得更加容易。微服务
单一服务架构下,随着时间的推移,项目的复杂度必然愈来愈高,相关人员也会愈来愈多,从而代码的合并频率会逐渐降低,权限愈来愈难以分配,须要愈来愈重的测试,部署也愈来愈复杂,频率愈来愈低。工具
然而微服务也会带来不少问题,例如若是设计不合理,总体的复杂度会提升。写代码的时候须要考虑调用失败的状况,须要考虑分布式的事务(固然不少时候是设计不合理致使的),从而对人提出了更高的要求。性能
总之,微服务带来了不少优点,同时也带来了不少挑战,咱们须要认真的审视本身,这些优点对当下的咱们是不是优点,这些挑战对当下的咱们是否能hold住。测试
这里有几点心得:设计
微服务除了是个技术活,更是个管理活。咱们得有和微服务相融的团队组织方式和工做流程。日志
在扇贝,咱们就对微服务根据其业务特性,技术特性作了一些分组,每组微服务对应 2-3 人的 DevOps 团队,每一个团队实现本身的 DevOps 流程(架构团队提供流程模板)。事务
每一个团队使用 GitLab CI 来实现 CI/CD:提交PR开始跑测试,测试经过进入代码Review,Review经过合并进主分支,开始自动构建 Docker Image,而后依次部署到 集成测试,预发布,生产环境。
每一个团队均可以在监控报警系统中看到本身负责的项目的运行数据,甚至自定义监控数据和报警指标,当数据发生异常,本身会收到报警,而后去处理。
不一样的微服务团队相互独立,经过gRPC 和 Celery 实现数据交换。
最后给你们推荐下微服务全家桶,做为一个Check List,上微服务的同窗能够勾一勾
欢迎关注咱们的知乎专栏