作者 | 黄哲铿

责编 | 胡巍巍

上周,前 1 号店技术总监、海尔农业电商 CTO,《技术管理之巅》作者黄哲铿,为大家带来了一场,关于微服务架构的分享,包含了微服务架构在千万级别日调用量、亿级别海量数据场景下的应用实践;从领域驱动设计、服务依赖治理、服务高可用、故障熔断降级快速恢复等方面,结合大型移动电商系统等应用案例,全面剖析微服务的应用等丰富的内容。

下面是整理的听课笔记,有需要的小伙伴可以收藏哦~

微服务架构在大型电商中的运用

以下所有带文字的图,点击查看更清晰

电商是促销拉动式的场景,也是价格战驱动的场景。 618 和双 11,都是典型的促销活动。其实都是在抢用户、扩市场占有率。在这样的场景之下,对秒杀、抢购是很热衷的玩法。

促销式的拉动对系统的挑战是什么呢?

可以从上图里看到:对高可用性的要求是非常高的,需要 99.99% 的高可用性。快速迭代,对系统容性的要求很高,从几万单变成几十万单、百万单,架构上不能影响快速迭代,所以有空中加油、或者是高速公路换轮胎的说法。

另外,为了应对瞬间的海量访问(尤其是秒杀场景),系统需要高可伸缩(快速扩容和缩容),这些都是对系统的要求。

大型电商系统的架构

从下往上,数据层,埋点数据把用户行为数据,实时数据存储在 NoSQL 、关系型数据库、大数据平台 。

基础架构层

这层实际上是中间件和服务,包括 MQ 的消息、JOB 的调试中心、SSO 联合登陆,还有发消息的,分布式的文件存储,用户上传的一些图片等等,除此之外还有应用监控的整个体系、自动发布的框架,支持到 AB 测试。

基础服务层

再上面一层就是基础服务层,这实际上是,用基础架构层提供的组件和服务,加上一些业务逻辑,构建了一些公用的服务,包括 OMS 、PMS 采购,运费模板、配送区域等,这些都是电商最常用的基础服务。

业务服务层

业务服务层我们可以看到的是,比如用户在前台能看到的界面,比如购物车、订单、首页,不管是不是微服务,至少是服务化的。这层就是所有网站应用的核心。除此之外就是第三方平台的 API 对接。

虚拟类目相当于“标签”,比如我们正常的类目叫做“生鲜”、“服装”,还有一些虚拟的类目叫做“ 618 特卖”,里面会聚合很多的商品,可以理解为一个标签,作为展示用。

暴露在最顶层的我们可以看到,这些就是各个端,比如 H5、PC、官网,这就是最终可见的端。

微服务架构的设计

应用的无状态化

很多网站一开始可能不是微服务化的,在早期的一些项目里,我们为了快速上线交付,会做一些单体的应用。随着订单量的发展,我们就开始做所谓的“微服务化”,第一步是把所谓的单体应用,变成应用的无状态化,以登录 SSO 来看,就是一种解决去状态化的方法。我们会拿到一个 Token,每次访问都会带着 Token,这就是所谓的去状态化。之后每一个应用都有横向可扩的能力。当访问量大的时候,就可以通过加服务器来增强水平扩展的能力。

这种应用无状态,其实配置文件还是有状态的。比如访问的数据库和节点,这些是通过配置文件来完成。我说到的案例基本都是基于 Spring Boot 来做微服务化,相关技术框架包括:Dubbo、ZK、Hystrix、RocketMQ、Elasticsearch、Redis 等等。

单体应用的拆分

在做了应用的无状态之后,就是对单体应用的拆分。拆分有几个维度,一个是从系统的维度,最简单的拆法,就是前后台拆开。比如购物车、商品、搜索、首页等属于前端,而后端给网站运营人员用。

还可以按功能的维度来拆分,对于用户服务,从 Service 层到表结构,其实是可以独立部署的,这就是微服务的概念。技术架构反应的,就是组织架构,在这种架构下,开发团队分为用户服务开发组、价格开发组、商品开发组等。

还可以根据读写维度进行拆分。比如搜索和商城的索引,肯定是独立的两个服务。用户注册下单支付,是一个完整的业务流程。这些是由若干个微服务构成。

服务架构搭建

数据的异构

在大型电商系统里面的服务架构搭建的经验和技巧,首先是数据的异构,以订单表为例,一般订单都非常庞大,一般按照 ID 来分表分库。这种分法对于查询用户所有订单时就要去各表捞数据,因此可以按用户维度来异构一张表。对于数据的存储,会分为热数据、冷数据和温数据,分别存在不同的地方。同时也会对数据进行聚合。在一些订单详情页,由于有很多 AJAX 请求,由于请求数太多,也需要做一些请求合并。后台的服务也要做一个合并。

以商品详情页为例,使几个接口的数据缓存合并在 Redis 中,从 Redis 中取得聚合好的数据,称为数据闭环。这是优化网络请求的通常做法。

缓存

缓存在大型电商系统中是常用的优化技巧。浏览器级别的缓存通过响应头进行设置。还会用到 App 客户端的缓存,把 H5/CSS/JS/ 图片打包,提前拉到客户端,在客户端做一个代理服务器,但是不会读取数据。可以提升用户体验。缓存的使用在网络上还有常用的 CDN。进到接入层后,如果使用软负载,也可以使用内存级别的缓存。

消息队列的应用

消息队列的应用,是做服务解耦的好方法。也要考虑消息失败和重试的场景,需要来做一些额外补偿来防止数据丢失。还有一个机制,是数据的校验和补偿。很多的场景能做到的,是最终一致性。大型的电商系统和金融系统场景,非常不一样,在设计分布式系统时,这是常用的方式。在电商中大多数情况,只要实现最终一致性就可以了。

高可用的架构设计

高可用的架构设计,对于电商来说,其实高可用是最基本的要求。如果在促销时,引来千万级别的用户,宕机会损失很大。

服务的降级、分组和故障的隔离

基于微服务架构的电商系统,高可用的方案有以下几个部分,首先要支持服务的降级。要做降级的开关,写在配置中心里面。比如在大促时,先把订单放在缓存时,再进行落库等操作。同时还要有服务分组和故障的隔离。比如秒杀时,对秒杀的应用单独部署服务,当秒杀的应用挂了之后,不会影响其他服务,因为有服务的隔离。同时要有限流机制,很多的框架都有支持。

流量治理

在极限的场景下, 对流量的治理要从多层面进行。比如在促销当天,会开启对于爬虫和机器人的流量进行限流。一般会在大促前进行封板,如果出现问题,就进行回滚,比如数据版本的回滚,在设置数据结构的时候,要做支持带数据版本号的回滚。

业务设计

业务设计方面的思考。从图中可以看到订单支付的流程。在设计的时候要考虑防重设计,可以采用防重 key 或者防重表的方案,但是耗费和代价很高,会在某些场景使用,比如积分,扣费等和金钱相关的场景下用。

业务设计要考虑状态机。尤其是订单的流转状态里,要做状态机的应用,包括正向和逆向流程,及其产生的结果。

大型移动电商的架构

动态路由

最后来回顾一下大型移动电商的架构。下图是一个移动电商的完整架构。从 App 端,主要做的是,静态文件的缓存、和智能的动态路由。中国的网络环境很复杂,需要在 App 端做智能动态路由。可以上一些 CDN,对动态的内容也做链路优化。会有一些对网络环境检测的机制,可以是 CDN,或者是走域名,也可以暴露 IP。

埋点和网关

移动电商里对 App 来说,还有一个很重要的是埋点,指的是全链路埋点。从 App 里用户的每一个操作,这个操作经过网络、服务层、中间件,整个链路要可以监控。对于快速的定位问题是非常有帮助的,尤其是移动电商性能的优化,第一步就是埋点。

在网络这一层,还有网关的接入。比如限流,动态负载。在网关里没有加太多逻辑,也有不同的做法。对于服务来说,最复杂的,是服务的依赖和治理。服务之间调用的优化,要基于业务场景,比如说购物车的服务,调用到价格、库存、促销等。当依赖的服务,不可用的时候,比如价格不可用,设计依赖的时候,要在购物车服务中做一个缓存,来对缓存调用,最后再对最终一致性进行验证。

全链路监控的做法,需要做到预警,这就是一个基础。通过对数据的监控请求来后,根据场景来做预警方案。

声明:本文为作者投稿,版权归对方所有。作者独立观点,不代表 CSDN 立场。

前 1 号店 CTO 黄哲铿揭秘:微服务架构在超大场景下的应用相关推荐

  1. 一文揭秘微服务架构统一安全认证设计与实践!

    作者:mars 链接:https://juejin.cn/post/6906149001520037902 -     前言     - 当企业应用系统逐渐增多后,每个系统单独管理各自的用户数据容易形 ...

  2. 专访1药网技术副总裁黄哲铿:揭秘技术跨界管理之道

    本文仅用于学习和交流,不用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾黄哲铿,<技术管理之巅> ...

  3. 「博文视点」专访黄哲铿/ Mr.K:未来三年,如何努力?如何赚钱?如何发展?...

    来源:博文视点Broadview 寒冬之下,大部分公司采取裁员.冻结招聘等措施,而据媒体报道,推特新老板埃隆·马斯克给员工发了一封邮件,他们被告知必须在美东时间周四晚上之前做出选择,要么继续长时间高强 ...

  4. 70,80,90后IT员工应该怎么管?专访《技术管理之巅》作者 黄哲铿

    黄哲铿 <技术管理之巅>作者,1药网 技术副总裁.曾担任,海尔集团 日日顺乐家CTO.早前服务于1号店 5年.MySteel 4 年,担任技术总监等职务,有着丰富的理论和实战经验.擅长大型 ...

  5. 前后端分离 集群负载均衡 分布式 微服务

    一.前后端分离 1.为什么要前后端分离 在以前传统的网站开发中,前端一般扮演的只是切图的工作,只是简单地将UI设计师提供的原型图实现成静态的HTML页面,而具体的页面交互逻辑,比如与后台的数据交互工作 ...

  6. 黄哲铿:妙用“缓存”,应对亿级流量峰值(文末赠书)

    许多大型互联网系统,如电商.社交.新闻等App或网站,动辄日活千万甚至上亿,每分钟的峰值流量在数十万以上,架构上如何应对如此高的流量峰值呢? 本文介绍如何通过"缓存"技术来给系统减 ...

  7. 前阿里P8级大神的Serverless+微前端架构学习总结

    前端在写简历和面试的时候,最憋屈的是啥? 我觉得莫过于明明你有90分的实力,却只表达出20分.于是拿不到大厂面试.谈薪被压价.与心仪offer失之交臂等种种糟心结果接踵而至. 这一方面是因为表达能力欠 ...

  8. protobuf前后端解析_Go语言微服务架构实战:第七节 Protobuf协议语法及原理

    Protobuf 协议语法 message:Protobuf中定义一个数据结构需要用到关键字message,这一点和Java的class,Go语言中的struct类似. 标识号:在消息的定义中,每个字 ...

  9. 前后端分离微服务架构如何设计?

    一.职责划分 前端 前端工作专注业务的页面呈现,非常注重用户体验度,也是与各种角色打交道最多的. 比如: 前端开发人员会经常与产品经理或者客户讨论页面样式.视觉效果,页面布局等各种页面渲染效果 前端开 ...

最新文章

  1. 去某大厂三面总监面,因为迟到了5分钟,面试官当着我的面把简历扔垃圾桶了...
  2. 支付宝支付 第五集:二维码生成工具
  3. dell物理服务器硬件磁盘监控
  4. vs2005中关于masterpage,Theme,skin的一点总结
  5. ai外呼营销系统_为了让居民预约口罩少出门,长宁这个街道使用AI技术智能语音外呼系统...
  6. function 多个函数用一个_程序员如何用一个脚本每天定时给多个女友发微信暖心话...
  7. Flex 3快速入门: 构建高级用户界面 添加拖放支持
  8. 银行客户交易行为预测:LightGBM模型
  9. 图形用户界面GUI会被淘汰吗
  10. 基于Java的体育场地预约系统
  11. mac下安装pyaudio
  12. 金士顿U盘不断自动连接断开解决方法
  13. maikr博客伴侣全新发布,支持博客备份和博客搬家
  14. 体积渲染(1)——光线步进简单示例
  15. python websockets 网络聊天室V1
  16. pkl形式的数据集读取和可视化
  17. 英语听力采用计算机化考试,高考英语复习资料及听力机考特点与应对建议
  18. BLDC电机中的死区时间究竟是什么?
  19. 42个5G智慧教育应用场景,告诉你5G将如何改变教育
  20. 三星s8android pie,三星修改Galaxy S8的Android Pie更新时间表,并添加M2

热门文章

  1. python if not A 和 if A is None
  2. Linux图形界面的安装和卸载,在CentOS下安装和卸载图形化界面的方法
  3. 中国替代运动器材市场趋势报告、技术动态创新及市场预测
  4. 2021年中国带LED显示屏的温度调节器市场趋势报告、技术动态创新及2027年市场预测
  5. html 权限模块设置,角色权限设置.html
  6. php.js 文件下载,使用JavaScript开始下载文件
  7. excel if in函数_Office教程:Excel函数AVERAGE与IF函数的组合标记平均值
  8. 2021 re:Invent ,我们到底该关注哪些发布?
  9. 曝荣耀仍未获得谷歌Android授权;诋毁鸿蒙的OPPO员工离职;微信圈子将停止运营|极客头条...
  10. 最全干货回顾,一文看尽亚马逊 re:Invent 2020全貌