微服务化

很多传统企业看着互联网公司都进行着微服务化,因此也想享受微服务化带来的好处便对自己的系统进行改造,但微服务化 多“微”才是最优?有哪些拆分的原则?

架构原则

  • 使用成熟的技术,不需要最先进最好的技术,要是自己人能够掌控的,不然出现莫名的问题,一两天都可能解决不了,你就等着被拿来“祭天”吧。
  • 至少有一个冗余的实例,可水平扩展,确保一个实用多个负载,挂掉一个仍然能够正常运行,这里就要保证服务应用的无状态性。
  • 确保数据中心能在地理上隔离,实现异地多活容灾,实现三城两地式物理布署,即使一个城市停电仍可提供数据的正常访问。
  • 有一套发布回滚机制,确保发布异常时能回滚到上一个版本,同时可追踪到异常。
  • 在架构设计之初就构建监控平台,无监控无疑相当于系统在裸奔,后面扩容无数据支撑、BUG查找,异常追踪都无从淡起。
  • 不断小试错,而不是像传统项目开发周期达一年,在时间就是生命的时代,产品上线黄花菜都凉了。
  • 任务自动化,机器能够做就让程序自动跑,减少人力运维。
  • 实现故障隔离,自动保护机制,防止一个服务拖垮整个系统平台,进行健壮性分析。
  • ……

  所有的设计都是为了高可用,易扩展、高并发下出现异常更容易恢复,降低异常对业务的影响,这就是微服务架构设计的理念,但不完全,有些还是依靠架构师的经验结合自己公司的业务特点来思考,并不是适合所有的公司,传统公司进行微服务化的困难很大,但做得好收益也非常高。

做好业务的拆、合

  微服务讲究的是小 ,一个程序只做好一件事就够了,因此需要对原有臃肿的系统拆分,对零散的功能进行合。

一个业务场景一个服务

  如用户服务、授权服务、菜单服务、订单服务…… 这样的粒度好处是更新用户服务其它的服务可以不用更新。

一个数据库对应一个服务

  数据库操作层封装成一个服务,所有对这个数据库的请求都要经过这个服务,而不用知道这个数据库的密码,而且可以进行流量权限等进行控制。

一个接口一个服务

  这种架构很极端,会造成微服务数量成几何数增长,维护难度极大。

  适当的粒度优势是服务能够独离部署,扩展方便,耦合度较小。

  应用层我们可以结合上面的方法从下往上分析,对所有服务抽像化后抽出基础功能封成服务,这样公共服务就行成了,而且可以互相引用。

  这样就形成了基础服务,是一些基础组件,与具体的业务无关。比如:短信服务、邮件服务。这里的服务最容易摘出来做微服务,也是我们第一优先级分离出来的服务。

  还有些是业务服务,是一些垂直的业务系统,只处理单一的业务类型如:风控系统、积分系统、合同系统。这类服务职责比较单一,根据业务情况来选择是否迁移,比如:如果突然有需求对积分系统进行大优化,我们就趁机将积分系统进行改造,是我们的第二优先级分离出来的服务。
  前端服务,一般为服务的接入或者输出服务,比如网站的前端服务、app 的服务接口这类,这是我们第三优先级分离出来的服务。
  组合服务,组合服务就是涉及到了具体的业务,比如网购过程,需要调用很多垂直的业务服务,这类的服务我们一般放到最后再进行微服务化架构来改造,因为这类服务最为复杂,除非涉及到大的业务逻辑变更,我们是不会轻易进行迁移。

独立数据库

  数据层都是独立的数据库,即一个数据库对应一个服务,这里需要对数据库层进行纵向切分,即原来一个表现在对应多个表分片保存。

给数据库带来的挑战

  每个微服务都有自己独立的数据库,那么后台管理的联合查询怎么处理?

有如下三种处理方案:

  • 严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法。
  • 将业务相关的表放到一个库中,将业务无关的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库各种切换导致后台统计难以实现,是一个折中的方案。
  • 数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到 NoSQL 数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用 Mongodb、Hbase 等。

拆分过后落地架构

  • 在确定使用Spring Boot / Cloud 这套技术栈进行微服务改造之前,请先梳理平台的服务,对不同的服务进行分类,以确认演化的节奏。
  • 先让团队熟悉 Spring Boot 技术,并且优先在基础服务上进行技术改造,推动改动后的项目投产上线。
  • 当团队熟悉 Spring Boot 之后,再推进使用 Spring Cloud 对原有的项目进行改造。
  • 在进行微服务改造过程中,优先应用于新业务系统,前期可以只是少量的项目进行了微服务化改造,随着大家对技术的熟悉度增加,可以加快加大微服务改造的范围。
  • 传统项目和微服务项目共存是一个很常见的情况,除非公司业务有大的变化,前期不建议直接迁移核心项目,先搭建一个微服务架构,然后先接入新业务,后面再将老项目逐个改造,这里有个问题就是统一配置,统一规则,如日志,接口,文档,代码风格,公共类库 版本等等提前规范。

  以上只是个拆分建议,传统项目到微服务转化首先是思想上的转变就是很困难的,然后有些方法也不能套大公司的,只能是趋向大原则,根据自己的业务量,人力 时间等来改造。

原文地址:https://www.cnblogs.com/Leo_wl/p/10744976.html

时间: 2024-11-14 11:34:47

微服务化的相关文章

微服务化的感想

随着系统的代码越来越庞大,模块的增多,系统很难跟随业务的发展.想着做一些系统上的重构,但重构过程,既需要保证业务的开发,也需要保证重构工作的顺利进行,为此引进了微服务的框架架构. 近期的cps系统在进行一系列的重构工作中,我有幸也参与进来了.首先进行的是用户模块的微服务化,分多期进行,难度从简到难,一步一步将用户相关的代码抽离出来,进行独立部署.项目中如果涉及到用户相关的调用,第一期,使用jar包方式使用maven依赖的方式来进行调用,二期,将服务化,将服务相关的方面,使用独立部署,调用方式,使

业务初期野蛮生长阶段,微服务化比较麻烦

谈谈后端业务系统的微服务化改造 本文所提倡的微服务,是结合作者所在team自身业务特点来说的,适合自身的场景,是建立在团队人员素质到了,有成熟的基础设施和框架.中间件辅助,流程也规范,包括CI.敏捷等,团队都做好了准确去做这个转变,有足够的能力来实施,微服务化也就是水到渠成的事了. 相反,小团队在前期或者野蛮生长时期,不宜选择微服务,不但影响效率还带来额外的复杂度.成长型或者大公司,有成熟的流程.规范.基础设施.平台等,要想在整条交付链路上加速,就需要投入更多的资源保障微服务化,一切自动化了,能

如何实现前端微服务化?

译者按: 微服务在后端开发中大行其道,其实对于越来越复杂的前端应用来说,微服务也是一种不错的选择. 原文: Micro frontends-a microservice approach to front-end web development 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 对于网页应用,现代的开发方法使得前端部分变得越来越大,与之对应的后端反而变小.我们的网站Weld的代码中90%都是前端相关.我可以想象大多数现代

网易容器云平台的微服务化实践(一)

作者:冯常健来自: 网易云-共创云上精彩世界 摘要:网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验,为此从 2016 年开始,我们容器服务团队内部率先开始进行 dogfooding 实践,看看容器云平台能不能支撑得起容器服务本身的微服务架构,这是一次很有趣的尝试. 一旦决定做微服务架构,有很多现实问题摆在面前,比如技术选型.业务拆分问题.高可用.服务通信.服务发现和治理.集群容错.配置管理.数据一致性问题.康威定律.分布式调用跟踪.CI/CD.微服务测试,以及调度

微服务化的不同阶段kuberneter的不同玩法

作为容器集群管理技术竞争的大赢家,Kubernetes已经和微服务紧密联系,采用Kubernetes的企业往往都开始了微服务架构的探索.然而不同企业不同阶段的微服务实践面临的问题千差万别,注定要在技术路线上产生分叉.如何选择适合自己的技术,是每一个践行微服务的团队面临的第一个问题.网易云是Kubernetes的第一批重度用户,在不同业务场景下解决了很多挑战,在本文中,网易云首席解决方案架构师刘超梳理了基于Kubernetes构建微服务体系的进阶之路. 微服务化的必要性 一个产品的发展,通常可分为

微服务化之服务拆分与服务发现

本文章为<互联网高并发微服务化架构实践>系列课程的第六篇 前五篇为: 微服务化的基石--持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库设计与读写分离 微服务化之无状态化与容器化 微服务化之缓存的设计 一.服务拆分的前提 说到微服务,服务拆分是绕不过去的话题,但是微服务不是说拆就能拆的,有很多的前提条件,需要完成前面几节所论述的部分. 首先要有一个持续集成的平台,使得服务在拆分的过程中,功能的一致性,这种一致性不能通过人的经验来,而需要经过大量的回归测试集,并且持续的拆分,持续的演

前端单页应用微服务化解决方案2 - Single-SPA

技术选型 经过各种技术调研我们最终选择的方案是基于 Single-SPA 来实现我们的前端微服务化. Single-SPA 一个用于前端微服务化的JavaScript前端解决方案 使用Single-SPA之后,你可以这样做: (兼容各种技术栈)在同一个页面中使用多种技术框架(React, Vue, AngularJS, Angular, Ember等任意技术框架),并且不需要刷新页面. (无需重构现有代码)使用新的技术框架编写代码,现有项目中的代码无需重构. (更优的性能)每个独立模块的代码可做

上云、微服务化和DevOps,少走弯路的办法

此文已由作者张亮授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 如果说一个项目的发展历程就像一段未知的旅程,那<云原生应用架构实践>就像一张地图,基于前人的探索标明了在这段旅途中将会碰到的障碍,并注明了越过这些障碍的方法. 最近,利用碎片化的时间把团队写的<云原生应用架构实践>通读了一遍. 作为一个解决方案架构师,我感觉收获很多,主要是对云原生架构有了一个系统的认识,并了解了一个从无到有.从小到大的项目,在整个成长过程中可能碰到的问题,以及解决这些问题的思

FreeWheel业务系统微服务化过程经验分享

2016 年下半年开始,FreeWheel 开始将其业务系统从 Rails 单体应用逐步迁移到微服务,同时技术栈从 Rails 改为 Golang,两年之后,整个迁移接近尾声,FreeWheel 业务系统技术团队对外分享了它们在微服务化过程中的经验. 原有架构的问题 FreeWheel 是一家为客户提供数字视频广告管理技术和服务的公司.其业务端产品需要对接客户,提供视频广告投放优化界面,类似于 Web ERP,该业务系统采用 Rails 技术栈开发,其架构是一个典型的三层架构. 这个系统经过近十