如何让笨重的系统架构变灵巧?


640?wx_fmt=jpeg

图片来源:Unsplash

作者丨徐贤军


来源丨徐贤军 架构师技术联盟


如需转载,请联系原作者授权



随着业务的复杂性增大、系统吞吐量增长,所有功能统一部署难度加大,各个功能模块相互影响使系统变的笨重且脆弱,因此需要对业务进行拆分、对系统进行解耦、对系统内部架构升级,以此来提升系统容量及健壮性。接下来主要分系统拆分结构演变两部分介绍:


系统拆分


系统拆分从资源角度分为应用拆分和数据库拆分,而从采用的先后顺序则可分为: 水平扩展、垂直拆分、业务拆分和水平拆分


640?wx_fmt=png

图1 系统分解原则


1.

>>>水平扩展<<<


水平扩展是最初始的解决的手段,也是系统遇到瓶颈的首选方案,主要从以下两个方面扩展:


  • 应用加实例,搞集群,把系统吞吐量扩上去;

  • 数据库利用主从进行读写分离,数据库其实是系统最应该保护的资源。


2.

>>>垂直拆分<<<


垂直拆分才是真正开始拆分系统,主要是从业务功能角度拆分。如拆出用户系统、商品系统、交易系统等。

为了解决拆分后各个子系统之间相互依赖调用的问题,这时会引入服务调用治理。虽然系统复杂度有所加大,但系统基本解耦,稳定性相对提高,做好降级就能避免因其它系统功能异常导致系统崩溃问题。

业务对应的库也会按照对应的业务拆分出用户库、商品库、交易库等。


3.

>>>水平扩展<<<


业务拆分主要是针对应用层面按功能特点拆分,如交易拆分出:购物车、结算页、订单、秒杀等系统。然后根据业务的特点,针对性做处理,如秒杀系统,由于同时参加秒杀的商品有限,可以提前把商品信息加载到JVM缓存中,自身减少外部调用提高性能,同时商品系统也减轻压力。

数据库拆分也可以分为几步:垂直分表、垂直分库、水平分表、水平分库分表

  • 垂直分表是指大表拆多张小表,可以根据字段更新或查询频次拆分

640?wx_fmt=png

图2 商品表拆分

  • 垂直分库是指按业务拆库,如拆出订单库、商品库、用户库等

  • 水平分表是解决数据量大,把一张表拆成多张表

  • 水平分库分表是更进一步拆分表

640?wx_fmt=png

图3 分库分表


4.

>>>水平拆分<<<


服务分层,系统服务积木化,拆分功能与非功能系统、业务组合的系统,如最近比较火的大中台或前台拆分,中台为积木组件,承担服务功能输出;前台更多的是组合积木服务,及时响应业务发展,如在电商网站单品页能看见主图、价格、库存、优惠券或推荐等信息,都是组合各积木组件呈现。

数据库也可以进行冷热数据分离,过期或过季商品可以归档,比如诺基亚3210手机,早已经停产且没有销售;用户查看订单时,更多的只是查看最近1、2年信息,2年前数据查看量少,在存储设计时可以区别处理。


结构演变


结构演变主要是随着系统复杂度增加及对性能要求提高而不得不做的系统内部架构升级。早期系统基本是应用直联数据库,但在系统进行拆分后,功能本系统不能单独完成,需要依赖其它系统,就出现远程调用。

640?wx_fmt=png

图4 早期应用结构


随着自身系统的业务发展,对性能要求高,而数据库一定程度上成为瓶颈,就会引入缓存及索引,分别解决key-value及复杂检索。索引加缓存现在已经成为解决高并发的基本方案,但在实施过程会有所区别。

14年对3亿热数据的系统升级时,技术选型为Solr+Redis,考虑到数据量过大,数据在Solr中只存index,而结果只存并返回主键ID,再通过ID从Redis中读取数据,Redis也不存放全部数据,数据设置过期时间,若未命中Redis,回源数据库查询并反写Redis。主要考虑资源与性能的平衡,Solr的存储减少及IO性能提高,结果数据只在Redis存放一份,Redis的数据经过运行大部分是热数据。当然现在也流行ES+Hbase组合。


640?wx_fmt=png

图5 增加缓存及索引


对于频繁使用的数据,从集中缓存读取,不一定达到性能要求,可以考虑把数据入JVM缓存。如类目信息,类目是电商系统基本数据,数据量不多,调用量大。个别情况下,使用ThreadLocal做线程内缓存也是种有效手段,但需要考虑数据清除及有效性。

在修改商品信息时,业务对商品信息的校验有名称长度、状态、库存及各业务模式等,而为了参数的统一校验方法参数为商品编号,导致各校验方法都需要读取一次商品,使用线程缓存可以解决该问题,性能提高了近20ms,读取商品每分钟减少近万次。

640?wx_fmt=png

图6 增加本地缓存


有时所依赖的系统性能不太稳定,为避免出现因第三方系统影响系统的情况,把依赖的服务进行数据闭环,与Dao一样当成系统的数据源。如商品系统强依赖商家系统的商家信息服务,若商家服务不稳定,商品系统一半服务都不稳定,采取对商家信息缓存一份,降低外部风险,把风险控制在自己手上。

640?wx_fmt=png

图7 远程服务进化成数据源


用户体验最近越来越重视,系统响应时间性能要求也越来越高,异步化是很好的一种选择:消息中间件。电商下单就是个很好的案例,在用户点击下单时,服务端不直接保存数据,给订单系统发送消息,就直接返回支付页面,在用户支付过程中,订单系统异步进行数据保存。

业务层、数据层的范围越来越宽泛,业务层可以分为基础服务与组合服务;数据层分为数据源与索引缓存;依赖的技术或中间件需要有效的结合,用于解决系统所遇到各种问题。

640?wx_fmt=png

图8 复杂的结构



最后


系统结构慢慢变复杂,稳定性、健壮性逐渐提高;技术选择都需要结合业务痛点、技术储备以及资源情况,否则就有些不切实际,泛泛而谈。

以上是近几年自己经历的技术变革及升级的总结,后续可以针对个别点进行详细分享。系统拆分的最后是微服务,结构的演变是技术的升级。



投稿啦!!!



精彩继续


CSDN作为国内专业的云计算服务平台,目前提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、机器学习、智能算法等相关云计算观点、技术、平台、实践、云产业咨询等服务。CSDN 公众号也一直坚持「与千万技术人共成长」的理念,深度解读行业内热门技术与场景应用,致力于让所有开发者保持敏锐的技术嗅觉、对行业趋势与技术获得更广阔的认知。


文章题材


  • 首先你需要关注我们的公众号“CSDN云计算”,这样你会更准确了解我们需要的文章风格;

  • 侧重于云计算领域相关的文章,可以是技术、运维、趋势等方面的务实内容;

  • 原创,要求文章有鲜明观点和看法。


投稿须知


  •  稿费:根据原创性、实用性和时效性等方面进行审核,通过的文章会发布在本微信平台。一经采用,我们将支付作者酬劳。酬劳可能不多,这代表的是一个心意,更多是因为爱好,是有识之士抒发胸怀的一种方式;

  • 字数要求:稿件字数以2K-8K为宜,少于2K或多于8K都会一定程度降低阅读愉悦感;

  • 投稿邮箱:lijy@csdn.net。或者添加微信表明来意,微信号:tangguoyemeng。请备注投稿+姓名+公司职位


如果咱们的合作稳定又愉快,还可以签订合同长期合作哦!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php ios 判断字符串长度,iOStextfield 限制输入字符长度和过滤表情符号

//增加修改框-(void)creatSaveView{UILabel * lab [[UILabel alloc]init];if (self.searchType 1) {lab.frame CGRectMake(14, 8 * KWIDTH 64, IPHONE_WIDTH - 100, 16 *KWIDTH);}else{lab.frame CGRectMake(14, 8 * KWIDTH, IPHONE_WIDTH - 100, 16 * KWIDTH);}lab.text …

约稿——码字能赢得百万人生?不开玩笑

2018是写作的风口。你不信&#xff1f;你不能写&#xff1f;我们来看看人们是如何写作的——其实人人都能写。绝望中靠写作赢回人生&#xff0c;并且财务自由2015年&#xff0c;夏知凉遭遇生意破产和朋友背叛&#xff0c;负债几十万的他&#xff0c;电脑都被拿去抵债&#xff0…

透过日播放量超过6亿的《延禧攻略》,看2018视频网站格局

作者介绍徐麟目前就职于上海唯品会产品技术中心&#xff0c;哥大统计数据狗&#xff0c;从事数据挖掘&分析工作&#xff0c;喜欢用R&Python玩一些不一样的数据文章来源数据森麟如需转载&#xff0c;请联系原作者授权前言随着《延禧攻略》的播出&#xff0c;魏璎珞、富察…

oracle怎么以时间排序,oracle指定数据排序在前面怎么处理

最近工作碰到客户的特殊要求&#xff0c;需要将特定的数据排序在前面&#xff0c;然后才按时间顺序排序&#xff0c;这个之前还真没有碰到过&#xff0c;好在有万能的度娘&#xff0c;搜索了一下&#xff0c;发现可以实现&#xff0c;使用order by decode语句即可。对于order b…

无法解析的外部符号 protected: virtual struct wxEventTable const * __thiscal

刚开始学习VC&#xff0c;对它的东西都不懂&#xff0c;其中最使用DECLARE_EVENTSINK_MAP时出现了一个错误&#xff0c; Linking... LegendWin.obj : error LNK2001: unresolved external symbol "protected: virtual struct AFX_EVENTSINKMAP const * __thiscall CLegend…

如何优雅使用Docker?请收下这15个小技巧

图片来源&#xff1a;Unsplash作者介绍ElNinoT文章来源Java架构沉思录原文链接www.cnblogs.com/elnino/p/3899136.html如需转载&#xff0c;请联系原作者授权1获取最近运行容器的id 这是我们经常会用到的一个操作&#xff0c;按照官方示例&#xff0c;你可以这样做&#xff08;…

supervisor监控php进程程序,详解Supervisor进程守护监控(转)

Supervisor的配置2.0 创建目录&#xff0c;初始化配置文件mkdir /usr/supervisorecho_supervisord_conf > /usr/supervisor/supervisord.conf12mkdir/usr/supervisorecho_supervisord_conf>/usr/supervisor/supervisord.confecho_supervisord_conf详解&#xff1a;echo_s…

H264/ACC数据使用librtmp推流到服务器

这是本人第一次发表这个&#xff0c;首先声明本人也是个菜鸟&#xff01;都说使用librtmp很简单&#xff0c;但是在网上找了很久&#xff0c;还是被各种大神坑了。 其实我也还是有很多东西不懂&#xff0c;如果下面有什么问题的地方&#xff0c;还请各位大神指点纠正。 1.视频数…

从容器到微服务,技术架构、网络和生态详解

图片来源&#xff1a;Unsplash作者晗狄文章来源架构师技术联盟如需转载&#xff0c;请联系原作者授权谈起容器技术&#xff0c;不得不提Docker技术。Docker 是 PaaS 提供商 DotCloud 开源的一个高级容器引擎&#xff0c;源代码托管在 Github 上&#xff0c;基于Go语言并遵从Apa…

brew php imagemagick,关于node使用gm和imageMagic在mac的坑

之前在windows上使用gm和imageMagic还是很顺手的&#xff0c;换了mac开发程序&#xff0c;发现自己才是坑。。emmmm但是要使用gm对图片进行拼接操作&#xff0c;只能硬着头皮上了笔记如下&#xff1a;mac不能直接安装imageMagic&#xff0c;而gm执行是依赖imageMagic的&#xf…

彻底搞懂 python 中文乱码问题

前言 曾几何时 Python 中文乱码的问题困扰了我很多很多年&#xff0c;每次出现中文乱码都要去网上搜索答案&#xff0c;虽然解决了当时遇到的问题但下次出现乱码的时候又会懵逼&#xff0c;究其原因还是知其然不知其所以然。现在有的小伙伴为了躲避中文乱码的问题甚至代码中不使…

如何让Kubernetes集群生产可用?

图片来源&#xff1a;veer本文作者Steven Wong (VMware)Michael Gasch (VMware)文章翻译Karen Lee文章来源K8S技术社区原文链接https://kubernetes.io/blog/2018/08/03/out-of-the-clouds-onto-the-ground-how-to-make-kubernetes-production-grade-anywhere如需转载&#xff0…

计算方法matlab编程徐萃薇,计算方法课程设计--用Newton插值多项式处理磁化曲线.docx...

计算方法课程设计题 目: 用Newton插值多项式 处理磁化曲线 学 院&#xff1a; 理学院 班 级&#xff1a; 数学 15-1 学 生 姓 名&#xff1a; 陈昌林 学 生 学 号&#xff1a; 2014028281 指 导 教 师&#xff1a; 石瑞银2017年 06 月 19 日课程设计任务书姓名陈昌林班级数学15…

北京房租到底有多高? | 爬取北京海淀区一居室租房信息

图片来源&#xff1a;花瓣网文章来源人工智能与大数据生活如需转载&#xff0c;请联系原作者授权最近北京房租成了热门话题&#xff0c;到底北京的房租有多高&#xff1f;本次实战是爬取北京海淀区一居室的租房信息&#xff0c;共爬取了300套房源信息&#xff0c;看一下北京的房…

oracle adg switch over,Oracle11gr2_ADG管理之switchover补充

之前演示的switchver总是提示下面的错误,并且需要人工干预:DGMGRL> switchover to snewtest;Warning: You are no longer connected to ORACLE.Please complete the following steps to finish switchover:start up instance "newtest" of database "newtest…

租房有深坑?手把手教你如何用R速读评论+科学选房

图片来源&#xff1a;网络编译Hope、臻臻、CoolBoy文章来源大数据文摘出品如有转载&#xff0c;请联系原作者。最近&#xff0c;租房这事儿成了北漂族的一大bug&#xff0c;要想租到称心如意的房子&#xff0c;不仅要眼明手快&#xff0c;还得看清各类“前辈”的评价避开大坑。…

oracle查询删除时间戳,Oracle查询时间戳,建表时间,新建序列,误删数据

Oracle的时间戳格式查询如下:SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER NLS_TIMESTAMP_FORMAT.Oracle查询建表时间:SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAMETABLENAME;新建序列(到时候改一下名字就行了):-- Create sequencecreate sequence SEQ_…

快速搭建Python+Selenium+Sublime 自动化测试环境方法

随着业内越来越多的公司对自动化测试的大力推行&#xff0c;对测试人员能够使用自动化工具的要求也随之增多。为了能让更多的同事在学习selenium的初期&#xff0c;能够顺利的迈出第一步&#xff0c;即可以通过代码操作selenium driver 调用浏览器打开目标网址&#xff0c;笔者…

oracle表空间如何压缩,Oracle里表空间的压缩

对于table空间的收缩是一个老生常谈的问题&#xff0c;不过却是一个一直都没有很透彻的讨论清楚过的问题。借ks_reny的机会&#xff0c;谈谈个人看法&#xff0c;有不及之处&#xff0c;希望高手引领更深入研究此话题。datafile是物理上的一个文件在下层就是基于文件系统的bloc…

刚刚,百度总裁张亚勤说……

作者奋笔疾书的小编原创文章&#xff0c;如有转载&#xff0c;请联系本公众号。9月4日&#xff0c; ABC SUMMIT百度云智峰会在上海举行。百度总裁张亚勤首先发表《云计算的新浪潮》主题演讲&#xff0c;他表示&#xff0c;我们已经全面进入物理世界数字化、AI as a Service、新…