《圣经》中有一个通天塔的故事,大体是说,上帝为了阻止人类联合起来,就让人类说不一样的语言。人类无法儿沟通,达不成“协议”,通天塔的计划就失败了。 可是千年之后,有一种叫“程序猿”的物种,敲着一种这个群体通用的语言,链接着全世界全部的人,打造这互联网世界的通天塔。现在的世界,正是由于互联网,才链接在一块儿。 当 "Hello World!" 从显示器打印出来的时候,还记得你激动的心情吗? java
若是你是程序员,必定看得懂上面这一段文字。这是每个程序员向计算机世界说“你好,世界”的方式。可是,你不必定知道,这段文字也是一种协议,是人类和计算机沟通的协议,只有经过这种协议,计算机才知道咱们想让它作什么。程序员
协议三要素 固然,这种协议仍是更接近人类语言,机器不能直接读懂,须要进行翻译,翻译的工做教给编译器,也就是程序员常说的compile。这个过程比较复杂,其中的编译原理很是复杂,我在这里不进行详述。 数据库
曾几什么时候,我混迹于电商、珠宝行业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资料的二维码: