作者: 三疯@MagEdu(马哥教育)
来源:www.magedu.com
大公司也是从小公司一步步走过来的,而大公司之所以与小公司不同,不在于基础的技术体系不同,而是当数据量达到一定程度后,引发的质变而已。而在思考质变带来的性能问题中,总结出来了一系列的工具,然后通过把对应的工具集合起来后形成了对应的运维工具平台。
“万丈高楼平地起”
有了运维工具平台是不是运维能力就够了?这句话先放在这里……
刚才已经说了,工具无大小,适合公司的使用即可,先抛开大公司使用的工具,我们先来聊聊小公司日常都需要什么工具?出入公司首先解决的是网络问题,然后大家能够上网后开始解决共享存储问题,比如搭建FTP,SAMBA,NFS网络存储,解决员工之间的文件传送和备份,这些在Linux学习过程中都有体现,马哥课程中也有比较详细的描述,比如如何搭建,此处省略不说了。
“古树千年幼苗成”
随着人们增加,必然会出现公司网络带宽首先,很多时候买的路由器也可以去做一定的限流功能,那随着业务的发展,公司有了自己网站的特色,这些特色的背后其实是公司核心的商业价值,比如网站的搭建,一个普通网站的背后究竟有什么呢?纯静态网站就不说了,没啥技术含量,我们聊聊动态网站,动态网站是会动的网站吗?显然不是,他其实是存在数据交换的网站,那既然有数据交换,数据交换过程中有哪些东西呢?数据交换后的状态有哪些呢?这其实就是所谓的数据对象存储的问题,比如常见的数据库存储软件有MySQL,既然用到了MySQL,那他日常的维护都需要什么?举个简单的栗子,他的部署,服务启停,数据备份,数据库容灾,对应时间点的备份,抽取binlog……,这背后的工具不用我详细描述,相信大家都知道了,那就是基本的数据库的维护,数据库的备份,恢复,策略都有哪些呢?这块如果你不知道请自行翻阅马哥课程进行脑补,已经被讲烂的课题,但是有时大家必须要掌握的,好了说外数据库的事情,那聊聊应用程序吧!
“盘龙卧虎高山地”
应用程序运行究竟是如何的?运行环境有哪些?比如公司早期需要快速迭代,那么PHP是不二之选,毕竟PHP是世界上最好的语言嘛,Linux上运行PHP环境的常见组合是Nginx+PHP+PHP-FPM,抛个问题,这样部署好后,代码请求的流程是怎么样的?php-fpm作用是什么?fastcgi又是干什么的?fastcgi被启动的worker用完了怎么办?这些信息在配置中如何体现?如何合理的优化?
带着上面的思考,如果你会了我就不说了,如果你不会,请自行恶补,已经是面试被问烂的问题了,如果连这个都回答不上来,真该回马哥教育回炉了。
那么谈到LNMP,那为啥一个请求通过一个LNMP就能访问到?一个请求又经过哪些过程达到最终想要的结果呢?这一块需要去了解DNS解析原理,HTTP协议请求,谈到DNS不得不说DNS解析方式有哪些?
DNS记录类型有哪些?DNS服务器的类型有哪些?
你是否知道什么叫主服务器,辅助服务器,缓存名称服务器,转发器?
那对于主辅架构中,区域的传送类型有哪些?
区域类型有哪些?什么叫子域,什么叫子域授权?
知道RNDC是干嘛的不?
以上问题也不多,翻翻看看应该都会,当然请不要告诉我你不会,要不然上半年都过完了,这些姿势还没学会的话,下半年岂能安身立命呢?
回过神来,HTTP协议知道多少呢?了解什么叫跨域吗?Nginx如何解决跨域问题?平时见过不少学员一个HTTP请求返回个403,啥意思呀?知道几个状态码呢?都表示啥意思呢?419表示啥(不是你知道的那个4-1-9)?对于HTTPS了解几分?为啥要搞HTTPS,解决什么问题?带来的性能问题有哪些?知道什么叫泛域名证书吗?和普通的证书哪个贵?最后再问一个最基础的,HTTP协议在TCP/IP协议栈中哪个位置?那你知道TCP/IP协议栈和OSI相关的知识吗?如果不知道,不好意思,下面你也不用读了,你真的不可能再看懂的。
………
“大海无边百川融”
能躺着看到这地方的说明基础还有一定水平,那好吧,接着我们俩聊聊,随着流量增加后,你需要了解的知识有哪些?你的应用服务器如何水平扩展,扩展后代码的结构和部署方式如何实现同步,如何实现流量的迁移,迁移的健康检车方式有哪些?你知道的负载均衡设备有哪些?
你觉得LVS和F5哪个更适合做CDN的负载均衡?
谈到LVS,那你知道LVS的模式吗?
每个模式的特点有哪些?他都解决了什么场景下的问题?
我感觉问题到这里后,你已经蒙圈了。在你还没彻底挂的情况下,我再补一个问题:LVS的负载均衡算法有哪些?他们解决的是什么问题?
谈完集群的LB类型后,那我们俩聊聊单点背后我们要干的事情—永无宁日,为了让自己吃得好,睡得香,咋整呢?高可用呀,High available
Cluster嘛,简称HA。常见的HA软件有哪些?知道keepalived的vrrp原理吗?常见高可用软件中对资源如何管理的?脑裂是如何产生的又该如何应对呢?有些东西他们本身是独立的,但是一旦结合起来后,你会发现他们之间其实能产生很大的效果,也就是1+1 > 2的节奏,比如当LB和HA结合起来的时候,是不是可以消除LB的单点问题,也可以消除HA的负载均衡问题,然后你也许会陷入LB的HA和HA的LB循环坑里面,不过这不重要,重要的是你是一个对架构有追求的好孩子,难道不是吗?
量变带来了质变,质变带来了架构的变化,所以对于对于一个普通的电商架构来说,上面的基础设施层基本上欧了,当然对于图片服务器,我们可以需要加一些静态文件服务器,或者换成服务器,比如通过Nginx和Varnish来解决静态文件的存储、缓存问题,提高用户端的快速响应能力,而对于我们的数据层面我们也可以通过添加缓存来解决应用和数据库IO速度不匹配的问题,大家都知道大型互联网架构中,缓存为王,那是不是所有的都需要加缓存,缓存又该如何加呢?举个简单的栗子,大家都知道MySQL也可以加缓存,比如Memcached,那你是否听过MySQL的Memcache Plugins呢?为什么要把他们放到同一台机器上,有什么特俗含义吗?
好了,到这里我们已经跨越到了中型互联网公司的范畴了,那接下来对于大型互联网公司他们都需要什么呢?举个简单的栗子,对于业务组件来说,他们需要的是一套完整的服务管理组件,中间层,底层封装好的api,那这些api对于业务的使用其实是透明的,他们也不需要去实现,只需要找对应的人去要授权,然后调用即可,这就是服务化的雏形,当然他们一样会面临服务负载均衡问题,一样会面临消息,队列,缓存,存储问题,当大型互联网公司在逐渐升级,逐渐解决遇到的瓶颈后,他们也开始逐渐思考如何把这种实践带来更多的市场价值,比如阿里云的诞生。我相信早期阿里云初衷是为了解决每年双十一后过剩机器带来的资源浪费问题,但是随着这条路深入到根底发现他不仅仅是解决资源问题,更是解决中国互联网基础设施问题,当然也是解决众多创业小公司的效率问题。