默默在看新机会的你,是否是面试的时候,偶尔被问起“能不能简单介绍一下项目的应用系统架构”?沉迷于业务开发的大家,有没有考虑过“用户访问到你开发的业务功能,到底通过了哪些环节”?前端
关注"一猿小讲"公众号的粉丝们今天有福了,由于今天我将结合这些年的一些认知理解,开坛设法给你们讲一讲应用系统架构的从 0 到 1。面试
01. 如何造一个大泥球?数据库
产品汪:紧急需求,2 天时间完成 x 网站的上线,包含知识问答页面功能。缓存
程序猿:时间短,任务紧。一切以上线为目标,那一切皆但是静态,一切皆是硬编码。花半天时间,让前端妹子写成静态 HTML,打成 x.war 包,放到Web服务器(Tomcat)就轻松搞定全部。服务器
产品汪:上一版的需求功能实现不错,领导很满意。接下来要实现注册、登陆功能。其中注册功能包含开通三方帐户,开通三方帐户会存在超时现象,超时后须要继续开通帐户,前端页面提示开户处理中。架构
程序猿:注册成功须要用 MySQL 作存储;开通三方帐户超时的须要继续处理,那这个只能加个定时任务系统来从新跑批支持了。微服务
产品汪:没想到大家开发团队挺给力啊,上期的功能又获得了领导的大力承认,不过咱们想看看开通失败的用户有哪些,顺带着能修改部分信息?另外咱们还想经过页面添加知识问答的文章?网站
程序猿:没问题,产品汪只要需求,咱们猿就开撸。不就是再开发个运营管理平台么,代码copy、粘贴,so easy!!编码
到此一个小而全的大泥球系统就产生了,或许你已经从事了 N 年的研发,也一直不停的再和这几个系统打交道。3d
02. 如何使大泥球跑的更好?
起初产品需求简单,开发的功能也简单,网站系统架构也简单。如上图所示:网站架构用一台Web服务器就轻松搞定。
随着业务推广,如上图所示:用户量逐日增加,单台Web服务器(Tomcat)确定不能知足网站的需求。
面对这个问题,不得不提提尼古拉斯赵四说过的一句话:世界上没有什么事,是一顿烧烤不能解决的,若是有,那就两顿。这个问题不就是这种解决方案么,一台 Web 服务器不够,那就再加一台呗。可是用户却郁闷了,访问地址变成了两个,这用户、产品汪们确定都不能接受。
程序猿再三思考一二。如上图所示:那就站在尼古拉斯赵四的肩膀上,再部署一个Nginx专门用来作分发,那问题不就解决了么。Web 应用服务器部署的问题是解决了,可是却引入了另一个问题,若是作分发的Nginx挂了,咋办呢?
各位看官确定也想到了尼古拉斯赵四的解决方案:那就再部署一份 Nginx。可是用户也会很郁闷,访问地址又变成了两个,这用户、产品汪们确定都不能接受。
程序猿每每会出其不意、未雨绸缪。天上飘来五个字“那都不是事”,加个 LVS 支撑一下问题不就迎刃而解啦。结合前面的步骤,你确定也会有疑问“若是 LVS 挂了怎么办?”,如有此疑问,说明你的思考没毛病。如上图所示:LVS 是主备,而且主备之间进行通信,若是 master 主的挂掉,备的会成为主节点继续对外服务。
到目前为止你对应用架构集群的部署就了解差很少了,随着业务的逐日增多,其中Nginx集群能够横向扩展、Web服务器也是能够横向扩展,可是 MySQL 数据库势必会成为瓶颈,那该怎么办呢?
如上图所示:面对MySQL成为瓶颈时,想到的即是分工明确、各司其职、进行数据库读写分离。通常也会引入基于内存的数据库 Redis,把常常读的信息缓存一份。
若是数据量级特别大,那不得不用一下数据库分库分表,可用的技术有 MyCat、Sharding-Jdbc,今天就再也不进行深刻展开啦。
03. 带你装 B,带你飞
另外在微服务发展盛行的今天,上述的应用架构(单体架构)确实也存在有不足点,就送给你们一张图,你们本身搜一下微服务相关的知识,脑补一下空白吧。
再送给你们抛一个“Service Mesh”服务网格的概念,有时间也能够稍微了解一下,技多不压身。
04. 写在最后
今天主要结合我的的理解,简单聊了聊应用架构的部署演变历程,但愿你可以有所收获。好了,码字不易,画图更不容易。若是感受稍微有点意思,不用赞扬,就点击右下角的“在看”,或者多多分享给你的朋友就很感激。