架构实战案例解析
王庆友
前1号店首席架构师
立即订阅
2739 人已学习
课程目录
已完结 23 讲
0/4登录后,你可以任选4讲全文学习。
概述篇 (2讲)
开篇词 | 想吃透架构?你得看看真实、接地气的架构案例
免费
01 | 架构的本质:如何打造一个有序的系统?
业务架构篇 (9讲)
02 | 业务架构:作为开发,你真的了解业务吗?
03 | 可扩展架构:如何打造一个善变的柔性系统?
04 | 可扩展架构案例(一):电商平台架构是如何演变的?
05 | 可扩展架构案例(二):App服务端架构是如何升级的?
06 | 可扩展架构案例(三):你真的需要一个中台吗?
07 | 可复用架构:如何实现高层次的复用?
08 | 可复用架构案例(一):如何设计一个基础服务?
09 | 可复用架构案例(二):如何对现有系统做微服务改造?
10 | 可复用架构案例(三):中台是如何炼成的?
技术架构篇 (9讲)
11 | 技术架构:作为开发,你真的了解系统吗?
12 | 高可用架构:如何让你的系统不掉链子?
13 | 高可用架构案例(一):如何实现O2O平台日订单500万?
14 | 高可用架构案例(二):如何第一时间知道系统哪里有问题?
15 | 高可用架构案例(三):如何打造一体化的监控系统?
16 | 高性能和可伸缩架构:业务增长,能不能加台机器就搞定?
17 | 高性能架构案例:如何设计一个秒杀系统?
18 | 可伸缩架构案例:数据太多,如何无限扩展你的数据库?
19 | 综合案例:电商平台技术架构是如何演变的?
总结篇 (2讲)
20 | 从务实的角度,给你架构设计的重点知识和学习路径
结束语 | 和你聊聊我的架构心路历程
结课测试 (1讲)
结课测试 | “架构实战案例解析”100分试卷等你来挑战!
架构实战案例解析
15
15
1.0x
00:00/00:00
登录|注册

16 | 高性能和可伸缩架构:业务增长,能不能加台机器就搞定?

王庆友 2020-03-27
你好,我是王庆友,今天我来和你聊一聊如何打造高性能和可伸缩的系统。
在课程的第 11 讲,我和你介绍了,技术架构除了要保证系统的高可用,还要保证系统的高性能和可伸缩,并且能以低成本的方式落地。在实践中呢,高性能、可伸缩和低成本紧密相关,处理的手段也比较类似,这里我就放在一起来给你讲解。
在实际的工作当中,我们一般会比较关注业务功能的实现,而很少关注系统的性能,所以我们经常会面临以下这些挑战:
系统的 TPS 很低,只要流量一大,系统就挂,加机器也没用;
机器的资源利用率很低,造成资源严重浪费。
我曾经就统计过公司云服务器的资源利用率,结果让我非常意外,有相当比例的服务器,它们的 CPU 和内存平均利用率长期不到 1%,但与此同时,这些系统整体的 TPS 只有个位数。这里,你可以发现,资源利用率低和系统性能低的现象同时并存,很显然,系统没有充分利用硬件资源,它的性能有很大的优化空间。
所以今天,我就先来给你介绍一下常用的性能数据,让你建立起对性能的基本概念;然后,我会和你具体讲解实现系统高性能和可伸缩的策略,让你能在实践中灵活运用。

常用的性能数据

对于服务器来说,1ms 的时间其实不算短,它可以做很多事情,我在这里列了几个基础的性能数据,你可以把它们看做是系统性能的基线。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《架构实战案例解析》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

  • 小洛
    单元化处理是个很好的思路,请教下老师在实践中有什么要注意的地方吗!再次感谢老师您的分享!

    作者回复: 核心就两点:
    1. 用户ID要在各个处理环节一路传递下去,这个会作为路由根据。
    2. 数据如何分布,有些可以按照用户分开分布,比如订单,保存在各自机房;有些和用户无关,比如商品,这个偏静态,在每个机房做全量部署。还有是库存,属于全局,但是动态数据,可以考虑中心化部署,各个机房都直接访问。

    2020-04-05
    2
  • 丁丁历险记
    去年维护一个旧系统
    加了缓存,数据库主从 ,大表格分区处理。
    核心业务分解,同步转异步。
    技术栈而言,没有运维,自己折腾,所以简单粗暴优先。
    数据库 mysql 从5.1 升至5.7 主要时mysql io 的一个吧bug。
    缓存直接用redis 消息队列用rabbit mq
    先封装数据库查询类,
    再将业务逐步接口化,tdd 开发流程。测试用例加个描述即文档。

    再就是业务架构,这点比较难,老板懂一点技术,又有自己的坚持,数据库设计的灵活性造成统计无法准确。
    只能用香浓第一定律,一点点优化,不段在业务上加约束,减少脏数据, 对课时管理,直接删掉直接update 的功能,仅支持增减。

    小公司的不容易,就是没有前端,于是bootstrap 来实现布局,pjax 实现数据无刷新体验优化,再自己封装分页,弹窗用layer ,微信用weui 图表用echart

    再就是slowquery 处理,一本高性能mysql 相伴,explain 再优化,
    例如defer join ,例如or 引发索引失效。

    投票服务用mysql 做的流控,转用redis 来处理。

    然后学了docker 容器化部署, k8s 太难没时间投入。



    2020-05-04
    1
  • 孙同学
    https://www.processon.com/view/link/5e51378ce4b0c037b5f9d1e3 学习整理更新,之前做过一个云端数据库和本地数据库做同步的业务,本地数据库要实时向云端传送数据,云端接口只有一个,本地调用很多,就将上传数据存储到redis中,返回上传成功结果,云端再另起脚本,用supervisor多进程消耗数据。
    2020-03-28
    1
  • Robin康F
    高性能措施:1优化单个请求的代码,比如一次数据库调用、一次rpc调用,基本是用空间换时间,2使用缓存(本地缓存和redis)3线上用ssd 4多节点负载均衡 5缩短调用链路
    可伸缩:促销加节点,完了减节点
    2020-05-06
  • 小洛
    再次请教下老师您关于第二点中库存中心化部署方案,是不是会出现下单扣减库存时 跨机房的调用?
    作者回复: 核心就两点:
    1. 用户ID要在各个处理环节一路传递下去,这个会作为路由根据。
    2. 数据如何分布,有些可以按照用户分开分布,比如订单,保存在各自机房;有些和用户无关,比如商品,这个偏静态,在每个机房做全量部署。还有是库存,属于全局,但是动态数据,可以考虑中心化部署,各个机房都直接访问。

    作者回复: 如果中心化部署,会有跨机房访问

    2020-04-07
  • 雨霖铃声声慢
    我们使用公有云的auto scale功能来保证高可用和可伸缩,AWS和Ali云都有类似的功能。
    2020-04-06
  • tt
    之前的留言没写完不小心点击了发布,只好再写完,对不起编辑和老师了。

    可水平拆分和无状态。

    我们有一个内部管理系统,多个业务模块公用一套用户体系,用户的登录状态保存在session中,然后session保存在缓存中,各个业务系统去缓存中查询用户的状态。

    另外有一个对外服务的系统,有4个节点,之前是一个负载均衡,用户不需要登录,此时是无状态的,后来增加了一个业务场景,存在会话了,此时有三种方案。

    1、每次请求上送token,根据token来确定此次会话状态,如果用JWT的话,就不需要去数据库或者缓存验证会话了。

    2、和内部管理系统一样,将会话状态保存在缓存中,四个节点去缓存中查询。

    3、调整负载的策略分发请求时根据JSESSIONID进行保持。

    为了简单和快速,我采用了第三种方法,现在觉得这样是不是就变为了有状态的了?某个用户在某次会话期间,服务节点挂了,用户的服务就会受到影响了。
    2020-03-27
  • tt
    可水平拆分和无状态。对这一点,我最近可能做得有点问题。

    情况是这样的,一个系统,对于用户的登录状态是保存在session中,多个业务系统公用一套用户体系
    2020-03-27
  • 特种流氓
    事务期间是否事务用到的资源都会被锁定

    作者回复: 有读锁和写锁,读锁的话大家都可以访问,写锁的话,大家对资源的修改就是互斥的。

    2020-03-27
  • zeor
    老师您好,请问怎么计算出一个系统要多少台机器,能抗住高峰期和平时,都有哪此指标 和什么计算工公式?

    作者回复: 没有特别好的计算方式,大致根据平时的性能进行估算,然后主要靠压测,在压测中优化。

    2020-03-27
    1
收起评论
10
返回
顶部