本篇文章作为弹性便是一切的姊妹篇,以某电商的痛点入手,介绍如何通过迁移到云上解决各种问题,并给出了架构设计的调整思路。

某服装电商公司的网站系统是搭建在自建机房里的。

这个网站可以让用户通过网页端或手机端建立和管理自己行头,并让用户、设计师和零售商之间建立社交网络,使三者形成互动。

该网站的架构是有一个前端服务,后台的服务被拆分成若干个微服务,数据库是MySQL,除了进行日常的交易数据处理(OLTP),业务也需要进行实时的数据分析(OLAP),形成各种报表,以观测销售数据、用户行为等。

他们遇到了几个问题:

  1. 由于业务增长迅猛,他们的服务器数量从几台暴增到几十台,但仍未能满足业务增长的需要;

  2. 业务量在每周不同日子,每天不同时点是有波动的,低谷时的业务量是高峰时的十分之一不到,导致高峰时服务器资源紧张,低谷时又有大量服务器空闲;

  3. 业务已经拓展到海外,海外用户普遍反映访问速度较慢,特别是视频和图片;

  4. 由于采购新的服务器周期长,配置新服务器也需要时间和人力,导致系统变更速度受到拖累,无法快速满足用户的新需求;

  5. 由于服务器昂贵,配置选择不多,他们往往把几类不同的微服务集中部署到一台服务器上,无法实现微服务架构设计所设想的故障隔离和弹性伸缩,也增加了系统间不必要的依赖,造成运维困难。

  6. 由于软件价格昂贵,中间件和数据库的选项不多,所有的数据操作,不管是交易型数据处理(OLTP)还是数据分析(OLAP),都集中在一个关系型数据库上,导致该数据库运行压力大,系统性能也大打折扣。

于是他们想到了云。

我们来看看云能怎样解决这几个问题:

  1. 在云上,有几乎无限的计算资源可以租用;

  2. 只要系统架构设计得当,可以完美实现弹性伸缩,既能满足业务增长的扩容需要,又能在业务低谷时释放资源,节约费用;

  3. 大型公有云商都提供全球部署,可以把系统部署到不同大洲的区域,通过全球负载均衡让用户可以就近反映,也会提供CDN服务加速视频、图片等静态内容的下载;

  4. 在云上获取新的计算资源都是几分钟的事情,可以实现按需即用;

  5. 云上,服务器的种类、配置选择众多;

  6. 更重要的是,除了提供服务器、存储、网络这些基础设施服务外,云还提供了托管数据库、对象存储、容器运行环境、应用运行环境、大数据处理、机器学习等平台服务,除了选择多,也能大大减少运维负担。

最后两点尤为关键,它为我们的系统解决方案提供更多的选项。

过去,在自建机房,服务器的数量和配置选择有限,中间件、数据库等软件的选择也是有限的,我们在技术选型上不得不做各种妥协,甚至把不应该部署在一起的模块和服务迁就在一起,两头不到岸。

但在云上,我们在技术选型则自由得多。

以数据库为例,除了关系型数据库,还有各种类型的NoSQL数据库、针对数据分析(OLAP)优化的数据库等。为交易型数据处理(OLTP)配置关系型数据库,为数据分析(OLAP)配置相应的服务,既互不干扰,又能把各自的特性和性能发挥到极致。

在部署上,我们可以把每一个微服务部署到独立的服务器或集群中,从一台高配置服务器集中部署多个系统的方式转换成多台低配置服务器,每台服务器只独立部署和运行一个独立系统和服务,完美实现微服务架构设计所追求的故障隔离和弹性伸缩。云也提供了管理繁杂架构的可视化、监控、链路跟踪、熔断、日志等的服务,大大降低运维管理的难度。

除此之外,云的弹性伸缩和按需付费天然适合像大数据处理和机器学习这些在运算时突然需要大量算力,但运算后又不需要这些算力的场景,我们无法想象要为这些场景专门采购服务器需要多大的成本、多长的周期和造成多大的浪费。

而且,云除了为这些场景提供算力外,也把常用的处理流程、算法、语言和工具打包成开箱即用的平台服务,大大节约开发成本。

前文提到的电商网站系统,在迁移到云上的过程中,充分理解了云提供了哪些服务和选项,并对系统的架构和设计进行相应的调整。它的架构设计调整为:

  1. 根据业务开拓的情况,分别在亚洲、欧洲和北美三个区域部署了系统,配置了全球负载均衡和CDN实现用户就近访问,大大提升每个区域用户的访问速度;

  2. 所有微服务都通过容器部署在云托管的Kubernetes集群服务上,简化了部署过程,并实现了自动弹性伸缩;

  3. 交易型数据处理(OLTP)通过云托管的关系型数据库实现,直接实现了多点部署,并在不需要修改代码的情况下实现了读写分离;

  4. 数据分析(OLAP)通过云托管的分析型数据库实现,能在数秒处理TB级的数据;

  5. 监控、日志查询、报警等全部依托于云的服务,可以集中处理架构中所有服务的运维工作;

  6. 开始考虑借助云的大数据处理服务和机器学习服务,实现智能推荐和广告精准投放。

通过这次迁移,该公司再不需要担心业务量激增、业务范围拓展所带来的“成长的烦恼”,公司的发展也有了更多的可能性。开发团队也能轻易搭建新的测试环境,加快开发和测试的速度。

当然,该公司也没有把全部“赌注”都压在一个云厂商上,他们还是保留了部分自建机房的资源,作为灾备环境,为将来退出某个云厂商留了后路。

觉得文章不错,顺手点个“点赞”、“在看”或转发给朋友们吧。

近期必读:

这本书可能是给用户最好的礼物——专栏《软件交付那些事儿》上线

刘华:公有云不仅是自建机房的替代品

刘华:弹性便是一切

关于作者


刘华(Kenneth)

  • 就职于世界500强银行,负责基金服务业务软件开发与交付

  • 敏捷、精益、DevOps专家

  • 公众号“敏于思 捷于行”博主

  • 精通极限编程、Scrum、看板方法、测试驱动开发、持续集成、行为驱动开发、DevOps工具栈

  • 曾在GDevOps、DevOpsDays Meetup、中国软件技术大会、ArchSummit等论坛发表主题演讲

  • 阿里云、谷歌云认证架构师

  • 著有《猎豹行动:硝烟中的敏捷转型之旅》一书和专栏《软件交付那些事儿》

我的最新专栏,小说体软件交付宝典

点击阅读原文可直接购买、阅读专栏。

关注公众号看其他原创作品

敏于思 捷于行

坚持原创高质量软件交付相关文章

觉得好看,点个“点赞”、“在看”或转发给朋友们,欢迎你留言

刘华:上云后,你的架构设计可以更飞相关推荐

  1. 解析云原生2.0架构设计的8大关键趋势

    摘要:在云原生2.0阶段,我们到底需要构建一个什么样的架构?华为云首席架构师为你一一解答. 本文分享自华为云社区<华为云首席架构师独家分享:云原生2.0架构设计的8大关键趋势>,作者:技术 ...

  2. 云数据库产品及架构设计背后的考量

    摘要:在阿里云数据库技术峰会上,阿里云数据库高级产品专家萧少聪(铁庵)介绍了全体系阿里云数据库产品并对于阿里云数据库产品的实现架构进行了分享,帮助大家了解了阿里云全数据库产品体系能解决哪些实用场景的问 ...

  3. 企业上云后,不容忽视的管理工具-云管平台

    很多企业在企业上云后,常常会忽视云管理平台,觉得云管理工具不实用,不能满足真正的需求.但在这里,我们小编告诉您,企业上云后,不容忽视的管理工具就是云管平台.其不仅可以省时省力省心,还能节约成本的. 云 ...

  4. 浪潮集团:企业上云后,管理会计走向何方?

    北京2018年9月30日电 /美通社/ -- 近日,"2018中国管理会计论坛"在北京召开.来自财政部.国务院国资委.全国人大财经委等部门领导,著名企业的高管和总会计师,国内管理会 ...

  5. 家电上云后,智能家居如何构建场景化应用

    摘要: 当智能家居行业正在从盲目的家电上云,转变为体验为主的场景驱动,AIoT企业如何具备持续的商业化能力? 本文分享自华为云社区<[云享·伙伴]第8期:家电上云后,智能家居如何构建场景化应用& ...

  6. 业务上云后,云上运维势在必行

    随着云计算的发展,企业上云已经成为了一种必然趋势.企业上云的初衷是把复杂的IT基础设施交给云平台去管理,企业可以专注于业务与应用.从而降低企业IT运营成本,提高IT部门工作效率. 业务上云的优势 1. ...

  7. 企业上云后,如何安全管控云管理后台?

    随着数字经济的深入发展,云计算作为数字化发展的基座,企业上云浪潮也在不断持续增高.根据中国信通院数据,2021 年,我国云计算整体市场规模达 3,229 亿元,同比增长54.4%,预计未来几年将持续高 ...

  8. 华为云视频Cloud Native架构设计与工程实践

    正文字数:7544  阅读时长:11分钟 随着云基础设施服务以及边缘计算技术的发展,Cloud Native,即云原生,架构理念和研发也越来越普及.从传统软件架构,到云原生软件架构的转变,还需要经历一 ...

  9. 云游戏流媒体整体架构设计(云游戏流媒体技术前瞻,最近云游戏概念很火,加之对流媒体技术略有研究,简单写一些)

    前言: 遥想当年阿法狗战败一众围棋国手,风气一转,似乎所有人都懂AI.这次谷歌又放出了stadia,国内鹅厂再次跑步进场,贵州某xx云提前布局. 闲来无事,尝试体验了一下贵州某xx云的云游戏(不打广告 ...

最新文章

  1. 手把手教你如何配置fiddler、并开启手机代理抓包、最详细
  2. Android中的URI
  3. QTcpServer / QTcpSocket 简单示例
  4. java convexhull_图像上划凸多边形(convexHull()函数)
  5. rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法
  6. 数学知识在游戏中的运用
  7. Java Double类doubleToLongBits()方法与示例
  8. OpenCV-python学习笔记(二)——image processing图像基本处理
  9. 圆与平面的接触面积_如果把绝对圆的球体放在绝对平的平面上,那接触面是不是无限小?...
  10. soapui 使用 java_SoapUI的进阶使用
  11. chrome历史版本下载
  12. iOS 封装Healthkit
  13. 电脑发到,电脑电影怎么传到手机_把电脑上的电影传到手机上的详细教程
  14. 电脑的Mac地址怎么查看
  15. Java名词解释什么是继承_java程序设计名词解释
  16. 99道python测试题
  17. 计算机操作系统复习精简版
  18. linux镜像烧录工具,树莓派操作系统镜像烧录方法指南
  19. java 农历 天文,“中国天眼”的新发现 终结天文界持续多年的一场争论
  20. C++核心准则T.48:如果你的编译器不支持concepts,使用enable_if模仿它

热门文章

  1. 子域名是什么意思?有关子域名的价值介绍
  2. win7计算机收藏夹位置,Win7收藏夹在哪?Win7怎么找收藏夹文件路径?
  3. php lumen和laravel,Laravel 还是 Lumen?
  4. 论文翻译:2019_Bandwidth Extension On Raw Audio Via Generative Adversarial Networks
  5. 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起
  6. 光学遥感影像的几何校正
  7. REST Assured 2 - 用IDEA创建一个基本的REST Assured Maven项目
  8. redhat 7 手册
  9. vue中使用滚动到列表底部
  10. javascript检测各种浏览器型号和版本、检测是否支持flash并显示版本