高可用系统在点评的实践与经验--讲座思考

SDCC 2016架构峰会纪要(三)

关键词:深度、干货、大牛、火爆、一线、图书

题目 主讲人 主讲人个人简介
支付宝红包稳定性实践与思考 王 俊 蚂蚁金服支付清算平台架构师
宅米网技术架构变迁与实践 李智慧 宅米CTO
携程下一代无线App架构设计 陈浩然 携程旅行网无线开发总监
新型架构实践与应用 孙子荀 腾讯手Q公众号后台负责人
从概率和用户感知出发实现高可用架构 史海峰 当当网架构部总监
高可用系统在点评的实践与经验 陈一方 大众点评交易平台技术团队负责人
微服务架构设计与实践 黄 勇 特赞CTO
大型电商网站中的通用精准化推荐平台的搭建 陈 兀 1号店担任推荐团队架构负责人
从0到1,手腕上的人工智能 范超霏 出门问问高级系统架构师

前面两篇主要是详细介绍具体业务场景的架构思路,现在介绍一下通用的互联网公司架构演进流程

高可用系统在点评的实践与经验–大众点评交易平台技术团队负责人陈一方

陈一方指出,高可用的架构很容易找到方案,但其中主要挑战是演进的节奏很难把握。以点评的交易系统的演进为主来描述如何做到高可用,并结合自己的经验作些分享。高可用性只是一个结果,要更多的关注迭代过程,关注业务发展。

他分别以大众点评交易平台幼儿时期、少年时期、青年时期、成年时期以及未来演进目标这五个不同时期为例,深度点评交易系统演进过程。

他主要从下面几个方面来分享

  1. 可用性的理解:(什么是高可用?如何保障?)
  2. 高可用秘诀一:频率要低(高可用性的设计,易运营&测试等)
  3. 高可用秘诀二:时间要快(持续关注运行时,充分利用故障时)
  4. 团队及个人经验教训

一、可用性理解

高可用他们这里强调的是3个9到5个9的目标,这里不作赘述

对于这种目标,他们拆分成如何实现该目标:

1.频率要低:减少出故障的次数

不出问题,一定是高可用的,但这是不可能的。系统越大、越复杂,只能尽量避免问题,通过系统设计,流程机制来减少这种问题概率。但如果经常出问题,后面的恢复再快也是没有用的。

2.时间要快:故障恢复时间要快

故障出现时,不是解决或者定位到具体问题,而是快速恢复是第一要务的,防止次生灾害,问题扩大。这里就要求要站在业务角度思考,而不仅是技术角度思考。

二、频率要低

高可用设计

0.整体设计(架构演进节奏)

整体上来说是需要结合业务场景需求以及自己相应业务流量规模来决定架构演进节奏,既不能太快(开发成本高、运维成本高、无法快速使用),也不能太慢(体验差,被淘汰)

譬如大众点评交易平台现在系统演进流程为:一个系统->模块化->垂直服务->服务平台化

下面通过大众点评交易平台演进过程来介绍这演进流程

1.幼儿时期

流量规模小,日万级订单

主要目标:能够在满足业务需求的前提下快速上线

满足业务要求是第一的,还没有机会遇到可用性等质量问题。考虑比较简单,要挂都挂了,量也比较小,出现问题,重启,扩容,回滚就解决问题了。

2.少年时期

上线之后,为了提升研发效率以及能够对故障进行隔离,开始对业务进行垂直拆分

业务流量,日十万级

将各个业务相互隔离,比如商品首页的展示,商品详情页的展示,订单、支付流程的稳定性要求不一样。前面可以缓存,可以做静态化来保证可用性,提供一些柔性体验;后面支付系统做异地容灾。基本该图就是所谓的服务垂直化,但业务数据没有完整隔离开,会导致不同服务会互相影响。

注:Deal是指商品系统、Order是指订单系统、Pay是指交易系统

3.青年时期

简单来说就是由于上一阶段不同业务直接数据会互相影响,故该阶段主要工作是做小服务、使之不共享数据,能够支持业务快速增加。大概日订单量可以达到百万级

从2013年开始,deal-service (商品系统)偶尔会因为某一次大流量(大促,常规活动)会挂,每几个月总有那么一次。基本上可用性就在3个9徘徊,这里订单和支付系统很稳定的,因为流量在商品详情页到订单有一个转化率,流量大了详情页就挂了,订单也就没有流量了,后来做了详情的静态化做得比较好了,能减少恢复的速度,能降级,但是deal-service的各个系统依赖太深了,还是不能保证整体端到端的可用性。

所以2014年deal-service就做了很大的重构,大系统做小,把商品详情系统拆成了无数小服务,比如库存服务,价格服务,基础数据服务等等。这下商品详情页的问题解决了,所以从2014年低订单系统的压力就来了,前面好了,后面压力就来了。2014年10月起,订单系统,支付系统也启动了全面微服务化,经过大约1年的实践,订单系统、促销系统、支付系统这3个领域后面的服务总和都快上百个了,后面对应的数据库20多个,这样能支撑到每日订单量百万级。

业务的增长在应用服务层面是可以扩容的,但是最大的单点,数据库是集中式的,这个阶段我们主要是把应用的数据访问在读写上分离,数据库提供更多的从库解决读的问题,但是写入仍然式最大的瓶颈(mysql的读可以扩展,写入QPS 也就小2万)

该架构大约能支撑QPS 3000左右的订单量。

4.成年时期

为支撑大规模促销活动,目标是每秒几万的QPS,日千万级订单量。需要对架构进行继续改进,他们这里是拿大众点评9.17吃货节促销该活动来说明

第一个遇到的问题便是数据(库)单点问题

对订单系统进行了架构升级,水平拆分,核心就是解决数据单点,把订单表拆分成了1024张表,分布在32个数据库,每个库32张表。

虽然数据层的问题解决了,但是他们还是有些单点问题,譬如MQ,网络,机房等。这里他举了准备9.17促销所遇到的问题:

  1. 服务的网卡有一个网卡坏了,没有被监测到,后来另外一个网卡也坏了,服务就挂掉。(服务器双网卡是标配)
  2. 使用 cache的时候发现性能在高峰期非常低,后来发现这个cache缓存服务器跟公司监控系统日志服务器在一个机柜,高峰期的流量被占去很多,给业务的网络流量就非常少,就影响了cache缓存服务器业务。
  3. 917大促的时候,对MQ这个依赖的通道能力评估出现了偏差,也没有备份方案,所以造成了一小部分的延迟。(由于低流量场景跟高流量场景不同部分压力不同)

Q:流量再涨10倍怎么办?

思路仍然是大系统做小,基础通道做大,流量分块。

易运营

这里的运营不是产品运营,而是指线上质量,譬如整个系统上线后,是否方便切换流量,是否方便开关,是否方便扩展。系统运营的几个基本要求:

  1. 限流。1秒50kpps跟5秒10kpps难度不一样
  2. 无状态。
  3. 降级能力。这里主要围绕的是跟产品体验密切相关

这里降级能力他用支付来举例子。系统会结合产品对支付渠道成功率进行统计,如果成功率低于75%就会提示不稳定,如果成功率低于50%就会自动关闭该通道。

易测试

这里他主要强调了两点:

  1. 高峰流量模型与正常流量模型可能会不一致
  2. 测试很重要

重视发布

两把利器:灰度发布、快速回滚……

三、速度要快

这里听下来,感觉就是:一,系统监控、预警能力好,如果有问题,能够立即跟运维告警,让其解决;二、运维要好,熟悉解决场景;三、系统容错能力强,小bug能够自己行解决

几点经验

  1. 珍惜每次真实高峰流量,建立高峰期流量模型。
  2. 珍惜每次线上故障复盘,上一层楼看问题,下一楼解决问题。
  3. 可用性不只是技术问题 。系统初期是:以开发为主;系统中期是:开发+DBA+运维为主;系统后期是:技术+产品+运维+DBA ;
  4. 单点和发布是可用性最大的敌人
时间: 2024-10-23 07:13:48

高可用系统在点评的实践与经验--讲座思考的相关文章

搭建一个redis高可用系统

一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份(一般工业界认为比较安全的备份数应该是3份).当一台redis出现问题了,另一台redis可以继续提供服务. 备份 三.自动故障转移 虽然上面redis做了备份,看上去很完美.但由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务.所以

唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)

架构师小组交流会:每期选择一个时下最热门的技术话题进行实践经验分享. 本期小组交流会邀请到了沪江黄凯.唯品会郑明华.滴滴赵伟.七牛云肖勤,对微服务粒度.高可用.持续交互展开了交流. 本期接着上期唯品会.滴滴.沪江架构师,关于微服务粒度.高可用.持续交互的实践分享交流(上)进行了交流. 第一轮:话题交流 滴滴赵伟:在整个服务,从单体服务到微服务的演进过程当中,如何去影响业务的这种正常发展? 唯品会郑明华:从单体服务到微服务的改造,有两种方式,一种是小打小闹,每次稍微改一点,这个时间会非常长,有时候

高可用系统开发可能遇到的问题

高可用系统开发中可能遇到的问题一般处理思路如下:

如何建设高可用系统

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性.以下是高可用系统的设计建议: 减少单点 去单点首先要识别整个系统所有主链路的单点,如机房(同城异地双机房),应用服务器,DNS服务器,SFTP服务器,LBS,缓存服务器,数据库,消息服务器,代理服务器和专线等,如系统通过专线调用对方服务,需要考虑同时拉联通和电信的专线,联通或电信的专线还是有一定概率会出现问题的,但是同时出问题的概率会小非常多.优先使用软负载,使用硬负载

跨园区容灾,升级不停服:高可用负载均衡集群实践

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云中间件团队发表于云+技术周刊特别版 作者:方坤丁 对于云计算行业来说,云服务的可用性和可扩展性是的检测其服务质量的重要标准,也是最受用户关注的两大难题.各云计算厂商针对容灾.升级等需求的解决方案,最能够体现其底层架构的实力.腾讯云基于基础架构的优势,为分期乐.微信红包等平台提供技术支持,可以完美满足如下三点需求: 1. 高可用能力,容灾能力强,升级不停服 2. 可扩展性强,功能丰富,性能超高 3. 避免重复造轮子,性价比之王

跨园区容灾,升级不停服——高可用负载均衡集群实践

对于云计算行业来说,云服务的可用性和可扩展性是的检测其服务质量的重要标准,也是最受用户关注的两大难题.各云计算厂商针对容灾.升级等需求的解决方案,最能够体现其底层架构的实力.腾讯云基于基础架构的优势,为分期乐.微信红包等平台提供技术支持,可以完美满足如下三点需求: 1. 高可用能力,容灾能力强,升级不停服 2. 可扩展性强,功能丰富,性能超高 3. 避免重复造轮子,性价比之王 近期,针对一些客户对腾讯云产品可用性的问询,腾讯云基础产品团队对负载均衡产品的原理做出详细阐述,并希望通过对腾讯负载均衡

高可用 kubernetes 集群部署实践

前言 Kubernetes(k8s) 凭借着其优良的架构,灵活的扩展能力,丰富的应用编排模型,成为了容器编排领域的事实标准.越来越多的企业拥抱这一趋势,选择 k8s 作为容器化应用的基础设施,逐渐将自己的核心服务迁移到 k8s 之上. 可用性对基础设施而言至关重要.各大云计算厂商纷纷推出了高可用.可扩展的 k8s 托管服务,其中比较有代表性的有 Amazon EKS.Azure Kubernetes Service (AKS).Google Kubernetes Engine.阿里云容器服务 K

如何设计一个高可用系统?要考虑哪些地方?

本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (69k+Star[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! 一篇短小的文章,面试经常遇到的这个问题.本文主要包括下面这些内容: 高可用的定义 哪些情况可能会导致系统不可用? 有些提高系统可用性的方法?只是简单的提一嘴,更具体内容在后续的文章中介绍,就拿限流来说,你需要搞懂:何为限流?如何限流?为什么要限流

山石网科-Hillstone-HA(高可用)active/standby固件版本升级终结经验篇

各位,好 我们在常见的企业边缘的网络架构中经常会遇到高可用.堆叠.VRRP等双机部署情景,那我在前面介绍的一些案例当中,基本都是双机部署,高可用的企业组网形式, 所以,基础的配置也都在前面介绍了,但是却没有介绍高可用的状态下如何升级硬件的OS的情景,这里因为在上周完成了一次(山石网科-HA)无缝迁移,所以我们这里特意总结如下思路, 与各位分享,欢迎大家参阅指正. 操作步骤:(请现场同事同时记录所有操作细节和完成时间) PS:为什么要做这一步,因为我们是一家专业的技术服务公司,所以我们队每一个步骤