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