从事java15年资深大牛告诉你为何学习网络协议和分布式系统架构!

《圣经》中有一个通天塔的故事,大体是说,上帝为了阻止人类联合起来,就让人类说不一样的语言。人类无法儿沟通,达不成“协议”,通天塔的计划就失败了。 可是千年之后,有一种叫“程序猿”的物种,敲着一种这个群体通用的语言,链接着全世界全部的人,打造这互联网世界的通天塔。现在的世界,正是由于互联网,才链接在一块儿。 当 "Hello World!" 从显示器打印出来的时候,还记得你激动的心情吗? java

若是你是程序员,必定看得懂上面这一段文字。这是每个程序员向计算机世界说“你好,世界”的方式。可是,你不必定知道,这段文字也是一种协议,是人类和计算机沟通的协议,只有经过这种协议,计算机才知道咱们想让它作什么。程序员

协议三要素 固然,这种协议仍是更接近人类语言,机器不能直接读懂,须要进行翻译,翻译的工做教给编译器,也就是程序员常说的compile。这个过程比较复杂,其中的编译原理很是复杂,我在这里不进行详述。 数据库

可是能够看得出,计算机语言做为程序员控制一台计算机工做的协议,具有了协议的三要素。语法,就是这一段内容要符合必定的规则和格式。例如,括号要成对,结束要使用分号等。语义,就是这一段内容要表明某种意义。例如数字减去数字是有意义的,数字减去文本通常来讲就没有意义。顺序,就是先干啥,后干啥。例如,能够先加上某个数值,而后再减去某个数值。会了计算机语言,你就可以教给一台计算机完成你的工做了。恭喜你,入门了!可是,要想打造互联网世界的通天塔,只教给一台机器作什么是不够的,你须要学会教给一大片机器作什么。这就须要网络协议。只有经过网络协议,才能使一大片机器互相协做、共同完成一件事。 这个时候,你可能会问,网络协议长啥样,这么神奇,能干成啥事?我先拿一个简单的例子,让 你尝尝鲜,而后再讲一个大事。 当你想要买一个商品,常规的作法就是打开浏览器,输入购物网站的地址。浏览器就会给你显示一个缤纷多彩的页面。那你有没有深刻思考过,浏览器是如何作到这件事情的?它之因此可以显示缤纷多彩的页面,由于它收到了一段来自HTT协议的“东西”。我拿网易考拉来举例,格式就像下面这样:
这符合协议的三要素吗?我带你来看一下。 首先,符合语法,也就是说,只有按照上面那个格式来,浏览器才认。例如,上来是状态,而后 是首部,而后是内容。 第二,符合语义,就是要按照约定的意思来。例如,状态 200,表述的意思是网页成功返回。如 果不成功,就是咱们常见的“404”。 第三,符合顺序,你一点浏览器,就是发送出一个 HTTP 请求,而后才有上面那一串 HTTP返回的东西。 浏览器显然按照协议商定好的作了,最后一个五彩缤纷的页面就出如今你面前了。咱们经常使用的网络协议有哪些?接下来揭秘我要说的大事情,“双十一”。这和咱们要讲的网络协? 在经济学领域,有个伦纳德·里德(LeonardE.Read)创做的《铅笔的故事》。这个故事一 个铅笔的诞生过程,来说述复杂的经济学理论。这里,我也用一个下单的过程,看看互界 的运行过程当中,都使用了哪些网络协议。 你先在浏览器里面输入 www.kaola.com,这是一个URL。浏览器只知道名字是“ www.kaola.com”,可是不知道具体的地点,因此不知道应该如何访问。因而,它打开地址簿去查找。可使用通常的地址簿协议DNS去查找,还可使用另外一种更加精准的地址簿查找协议HTTPDN。不管用哪种方法查找,最终都会获得这个地址:106.114.138.24。这个是IP地址,是世”。知道了目标地址,浏览器就开始打包它的请求。对于普通的浏览请求,每每会使用HTP 可是对于购物的请求,每每须要进行加密传输,于是会使用HTTPS协议。不管是什么协里 面都会写明“你要买什么和买多少”。
ERP之痛

曾几什么时候,我混迹于电商、珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP)。做为一个ERP系统,系统主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。做为一个管理系统,你们的通常开发习惯就是使用.Net或Java技术,创建一个单块(单进程)架构的应用,只有一个SQLServer或MySql数据库。而后在项目文件中分一下各个模块,三层结构方式组织代码编写开发。最后测试,交付上线。浏览器

起初,由于数据量不大,系统性能还不错,各类列表查询,报表查询,Excel数据导出功能等用的都很流畅。可是随着公司业务发展,订单量日积月累,后期各类业务部门的报表查询、数据导出需求不断增多,咱们渐渐就感受系统运行愈来愈慢。因而咱们可能最早想到的解决方案就是,优化系统瓶颈数据库这个大头。咱们可能的一种尝试就是将数据库单独放置到一个服务器,实现数据库和应用程序分离,或者是创建各类数据库表索引,优化程序代码等方法。通过这样一番研究优化,系统某些功能可能性能的确大大提升,可是咱们仍是发现某些功能列表的数据查询导出依然很慢,或者随着数据量继续积累,原来较快的列表导出功能,也越来越变得缓慢了。咱们用尽各类办法,最后也达不到理想的系统性能速度。性能优化

为了提升系统性能,咱们也许会主动学习一些互联网公司的技术经验,什么高并发、高性能、大数据、读写分离等方案,发现本身根本无从下手。咱们会以为由于系统业务特色不同。ERP系统并发量不高,主要是业务复杂,各类业务耦合度远高于那些互联网应用,很差作拆分,数据查询逻辑要远比互联网系统复杂,一个列表页查询出来的数据,每每须要关联四、5张表才能获得结果。有些报表类的甚至更多。加上各类业务操做事务性、数据一致性要求很高,不少时候致使咱们措不及手,没法进一步优化系统。拆分应用层服务器

拆分应用层微信

是践行“微服务”架构的理念。将原来大而全的单进程架构按照业务模块拆分红可独立部署的应用程序,以此来达到平滑系统更新、升级、方便负载扩展的目的。具体来讲,技术上可使用restfull风格的接口,也可使用像java中dubbo框架方式来简化开发复杂度。ERPWeb端或其余移动端也是一个单独的应用充当表现层。很是薄,只是简单的接受参数,调取后台其余各类微服务程序的接口获取所需展现的数据。微服务充当业务逻辑层,每一个微服务都是可独立部署上线的程序,对外提供数据访问接口。restful

微服务可使用流行的各类RPC框架,好比dubbo,能够支持多种调用协议Http、TCP等,这些框架使得编码比较容易,框架封装底层数据通讯细节,使得客户端执行远程方法如同执行本地方法同样简单。网络

dubbo微服务架构,还支持服务治理,负载均衡等功能。这样不只能够提升系统的可用性,还能动态提高系统应用层的性能。好比仓库管理中入库业务很是繁忙,占用很是多的CPU和内存资源,咱们能够另外加一台机器,单独再部署一个仓库管理服务上去。这样使得整个系统,有两个仓库管理服务在同时工做,平衡负载。而这一切都是在服务注册中心,好比Zookeeper下自动完成的。架构

微服务结构,天生很好的支持系统更新升级操做。好比财务模块有个新需求须要上线,咱们只须要替换财务模块的服务重启便可。这对已经登陆系统的用户来讲,没有多少影响,不用从新登录系统,其余模块服务使用也不受影响。

很是有幸能和你们一块儿分享知识和经验,正是因为你们的无私分享,才让咱们得以成长和进步,我最近几年来都不多分享东西,有时候是由于工做很忙没有时间写点东西,有时候也是由于本身懒或是没有什么新东西能够分享给你们的。最后也但愿你们对个人分享不足之处给予批评指正,一块儿进步!

顺便给你们推荐一下个人Java架构方面的大牛微信:dongnaobest20,会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系,主要针对Java开发人员提高本身,突破瓶颈。 最后附上领取java资料的二维码:

相关文章
相关标签/搜索