丨大型励志片丨分布式学习记录及吐槽-第一天

这一系列用于记录自己学习目前流行的分布式系统, 内容其实都是围绕高并发,高可用,高扩展,架构展开, 从而搞懂分布式是什么,为什么需要分布式, 以及如何开发分布式系统.

前言

工作已有两年之久, 这两年间, 驰骋沙场, 磕磕碰碰, 也算是习得了一定本领, 但是正如小时候有一个朋友和我说过,”开车两年的司机最容易出车祸”的道理

在我自以为学的东西已经完全足够解决工作上的问题的时候, 危险肯定也在悄悄逼近, 作为一名普通的半吊子程序员, 一没有好看的文凭, 二没有自己拿得出手的开源项目, 在努力工作的同时, 也经常在无声的夜晚考虑一年后, 两年后的自己会混成什么样子.

当今的国内环境下, 码农的职业寿命普遍在35岁有分水岭, 企业招收程序员普遍不会录用超过35岁的人来干活, 因为他们包袱重, 干活效率不如应届毕业生

也许是为了更好的生存下去, 也许只是为了好玩, 但不管怎么样, 我觉得作为一个后台程序员, 是时候开启分布式系统学习的大门, 从一名CRUD程序员, 往软件架构师进行迈进.

after 前言

前面说的一堆其实可以说是屁话!

其实是我们领导一开始就要求我们对分布式微服务展开系统的学习, 因为目前线上在运行的一套东西, 就是一套SpringBoot+Dubbo的多服务分布式系统, 同时也利用了集群,负载均衡,缓存达到了高并发的要求.

于此时他, 为了未来自己如果想搞自己的产品, 那么也应该具备一定的架构知识, 为产品搭建一套完备的后台架构, 这是产品屹立不倒的基础

综上原因, 我觉得学习现在流行的分布式系统是必要的.

[注意]: 我只是借用了这种说法, 事实上本系列会从架构方面开始一点点的学习, 毕竟分布式是一种很宽泛的说法, 不同服务分布在不同的机器上, 各自履行职业, 就已经可以说是一种分布式系统了, 但是如何做到优秀呢? 那么一定是要往高并发,高可用,高扩展这些方向展开的

一个系统总会有一个瓶颈点

在写今天这篇文章前, 我花了很多时间, 看了好多现有国内的架构分析. 然后我发现了一个规律, 那就是不管是什么系统架构, 不可能完全解决压力瓶颈这个缺点.

比如我们最早的单机应用, 一台服务器作为Server解决一切客户请求, 这时候的瓶颈点在服务器, 服务器的处理能力是我们QPS高不高的核心

随后演变到多机应用, 用一台负载均衡做转发分流, 这时候的瓶颈点在负载均衡器那里, 而之所以一台服务器比一个负载均衡器更弱, 简单来说那是因为他们的系统架构不一样, 比如说我们用nginx做负载均衡, 因为nginx是模块化,事件驱动,异步,单线程,非阻塞. 这要nginx的处理能力极高, 安排它去单独做最前沿的服务接入点比普通的一台服务器会更优秀.

但是nginx再强, 也不可能抗得过可以无限增长的并发量. 所以我们说这时候的瓶颈点是负载均衡那里!

那么我们该怎么解决? 解决方式很简单, 多搞几个nginx即可. 不过问题也来了, 多个nginx又需要另一种更强劲的转发系统来专门将请求转发到我们的多台nginx上. 这时候显然再使用nginx是不可能的, 这时候人们想到了LVS/F5, 这是一类直接跑在操作系统内核甚至硬件上的负载均衡器! 不管怎么说, 肯定比你nginx跑在操作系统应用层要厉害多了, 人家走的路比你少, 肯定比你快!

可是这样一搞, 我们的瓶颈点依旧存在, 现在的瓶颈点就是LVS/F5啊, 事情依旧没变

这时候有人想到了DNS多IP来分散并发量, 这确实也是可以的, 而且只要有钱!可以做到无线扩充, 但这时候钱力人力变成了瓶颈点, 老板肯定不乐意的

所以不管怎么样, 高并发系统总会存在一个瓶颈点, 而不停的进行优化, 才有了现在的答卷, 我们不能断然的说现在已有的高并发系统是完美的, 它们只是在满足当前的需求而已.

为什么要搞分布式微服务

我一开始以为搞分布式微服务是为了提高并发, 然后我发现我错了!

分布式微服务的目的其实是为了提高可维护性和可扩展性, 同时提供更多的工作岗位?(大雾).

当我们受够了所有东西全部在一个大项目下搞的时候, 我们就开始分解它们, 让他们单独开来自己运行, 我们需要的时候去调用.

分开来的好处非常多, 我想大家网上查可以搜到很多, 不过我今天发现分开来还有一个更大的好处就是物尽其用!

比如说原来你把3个服务全部搞在一起对外提供, 然后为了抗住并发, 你复制了三份这种服务, 但是其实只有其中的一个服务有很大的并发量, 而另外两个服务是不怎么常用的.

所以这时候就出现了网络,硬件资源浪费.

如果我们把他们拆分开来, 只把真正需要的服务复制三份, 那才是物尽其用.

其实我们很早就有了这类开发思想在指导我们, 但是为什么最近才开始流行分布式微服务呢?

因为以前没有一个比较成熟的分布式微服务框架来方便我们程序员去管理那么多服务. 如果没有一个好框架的管理, 那么拆分服务对于我们程序员来说就是噩梦, 因为没有优秀思想的指导, 我们会把项目搞得一团糟, 随之换来的就是开发效率变低以及无止境的加班

现如今市场对于高并发的需求越来越多, 因为网民数量的增大, 所以推动了分布式微服务框架的发展.

目前来看, 最流行的分布式微服务框架一个是SpringCloud, 还有一个是阿里的Dubbo.

由于我目前的公司用的是SpringBoot+Dubbo, 所以我后续打算也先从Dubbo学起.

总结

离三年工作经验还有一年, 我打算这一系列能在一年后完整的结束, 让自己有一个大的突破

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

Live2d