其他
大厂它们都是如何从单体应用转向微服务化的?
点击上方“IT平头哥联盟”,选择“置顶或者星标”
网站 用户注册、登录功能 商品展示 下单 管理后台 用户管理 商品管理 订单管理
开展促销活动。比如元旦全场打折,春节买二送一,情人节狗粮优惠券等等。 拓展渠道,新增移动端营销。除了网站外,还需要开发移动端APP,微信小程序等。 精准营销。利用历史数据对用户进行分析,提供个性化服务。 ……
网站和移动端应用有很多相同业务逻辑的重复代码。 数据有时候通过数据库共享,有时候通过接口调用传输。接口调用关系杂乱。 单个应用为了给其他应用提供接口,渐渐地越改越大,包含了很多本来就不属于它的逻辑。应用边界模糊,功能归属混乱。 管理后台在一开始的设计中保障级别较低。加入数据分析和促销管理相关功能后出现性能瓶颈,影响了其他应用。 数据库表结构被多个应用依赖,无法重构和优化。 所有应用都在一个数据库上操作,数据库出现性能瓶颈。特别是数据分析跑起来的时候,数据库性能急剧下降。 开发、测试、部署、维护愈发困难。即使只改动一个小功能,也需要整个应用一起发布。有时候发布会不小心带上了一些未经测试的代码,或者修改了一个功能后,另一个意想不到的地方出错了。为了减轻发布可能产生的问题的影响和线上业务停顿的影响,所有应用都要在凌晨三四点执行发布。发布后为了验证应用正常运行,还得盯到第二天白天的用户高峰期…… 团队出现推诿扯皮现象。关于一些公用的功能应该建设在哪个应用上的问题常常要争论很久,最后要么干脆各做各的,或者随便放个地方但是都不维护。
用户服务 商品服务 促销服务 订单服务 数据分析服务
数据库成为性能瓶颈,并且有单点故障的风险。 数据管理趋向混乱。即使一开始有良好的模块化设计,随着时间推移,总会有一个服务直接从数据库取另一个服务的数据的现象。 数据库表结构可能被多个服务依赖,牵一发而动全身,很难调整。
微服务架构整个应用分散成多个服务,定位故障点非常困难。 稳定性下降。服务数量变多导致其中一个服务出现故障的概率增大,并且一个服务故障可能导致整个系统挂掉。事实上,在大访问量的生产场景下,故障总是会出现的。 服务数量非常多,部署、管理的工作量很大。 开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作。 测试方面:服务拆分后,几乎所有功能都会涉及多个服务。原本单个程序的测试变为服务间调用的测试。测试变得更加复杂。
traceId:traceId标识一个用户请求的调用链路。具有相同traceId的调用属于同一条链路。 spanId:标识一次服务调用的ID,即链路跟踪的节点ID。 parentId:父节点的spanId。 requestTime & responseTime:请求时间和响应时间。
Elasticsearch:搜索引擎,同时也是日志的存储。 Logstash:日志采集器,它接收日志输入,对日志进行一些预处理,然后输出到Elasticsearch。 Kibana:UI组件,通过Elasticsearch的API查找数据并展示给用户。
部署新实例 将新实例注册到负载均衡或DNS上
端到端测试:覆盖整个系统,一般在用户界面机型测试。 服务测试:针对服务接口进行测试。 单元测试:针对代码单元进行测试。
推荐阅读: