缘故原由很大略,那个时候做事器真个代码便是统统:接管浏览器的要求,实现业务逻辑,访问数据库,用JSP天生HTML,然后发送给浏览器。
纵然后来Javascript在浏览器中添加了一些AJAX的效果,那也是锦上添花,绝对不敢唐突。由于页面的HTML紧张还是用所谓“套模板”的办法天生:美工天生HTML模板,程序员用JSP,Veloctiy,FreeMaker等技能把动态的内容添加上去,仅此而已。
那个时候最盛行的图是这个样子:
在最初的J2EE体系中,这个表示层可不仅仅是浏览器中运行的页面,还包括Java写的桌面端,只是Java在桌面端太不争气, 没有发展起来。
每个程序员都是所谓“全栈”工程师,不仅要搞定HTML, JavaScript, CSS,还要实现业务逻辑,编写访问数据库的代码。等到支配的时候,就把所有的代码打成一个WAR包,往Tomcat指定的目录一扔,测试一下没问题,收工回家!
不差钱的公司会把程序支配到Weblogic,Websphere这样的运用做事器中,还会用上高大上的EJB。
虽然看起来生活“大略”又“惬意”,但实际上也须要实现那些多变的、不讲逻辑的业务需求,苦逼的实质并没有改变。
1、前后真个分离
随着大家对浏览器页面的视觉和交互哀求越来越高,“套模板”的办法逐渐无法知足哀求,这个所谓的表示层逐步地迁移到浏览器当中去了,一大批像Angular, ReactJS之类的框架崛起,前后端分离了!
后真个工程师只卖力供应接口和数据,专注于业务逻辑的实现,前端取到数据后在浏览器中展示,各司其职。
像Java这样的措辞很适宜去实现繁芜的业务逻辑,尤其是一些MIS系统,行业软件如税务、电力、烟草、金融,通信等等。 以是剥离表示层,只做后端挺得当的。
但是如果仅仅是实现业务逻辑,那后端也不会须要这么多技能了,搞定SSH/SSM就行了。
2、后端技能互联网,尤其是移动互联网开始兴起往后,海量的用户呼啸而来,一个单机支配的小小War包肯定是撑不住了,必须得做分布式。
原来的单个Tomcat得变成Tomcat的集群,前边弄个Web做事器做要求的负载均衡,不仅如此,还得考虑状态问题,session的同等性。
(注:拜会文章《小白科普:分布式和集群》)
业务越来越繁芜,我们不得不把某些业务放到一个机器(或集群)上,把其余一部分业务放到其余一个机器(或集群)上,虽然系统的打算能力,处理能力大大增强,但是这些系统之间的通信就变成了头疼的问题,行列步队(MQ),RPC框架(如Dubbo)应运而生,为了提高通信效率,各种序列化的工具(如Protobuf)也争先空后地问世。
单个数据库也撑不住了,那就做数据库的读写分离,如果还弗成,就做分库和分表,把原有的数据库垂直地切统统,或者水平地切统统, 但不管怎么切,都会让运用程序的访问非常麻烦,由于数据要跨库做Join/排序,还须要事务,为理解决这个问题,又有各种各样“数据访问中间件”的工具和产品出身。
为了最大程度地提高性能,缓存肯定少不了,可以在本机做缓存(如Ehcache),也可以做分布式缓存(如Redis),如何搞数据分片,数据迁移,失落效转移,这又是一个超级大的主题了。
互联网用户喜好上传图片和文件,还得搞一个分布式的文件系统(如FastDFS),哀求高可用,高可靠。
数据量大了,搜索的需求就自然而然地浮出水面,你得弄一个支持全文索引的搜索引擎(如Elasticsearch ,Solr)出来。
林子大了,什么鸟都有,必须得考虑安全,数据的加密/解密,署名、证书,防止SQL注入,XSS/CSRF等各种攻击。
3、“大后端”
前面提到了这么多的系统,还都是分布式的,每次上线,运维的同学说:把这么多系统折衷好,把老子都累去世了。
得把持续集成做好,能自动化地支配,自动化测试(实在前端也是如此),后来涌现了一个革命化的技能docker, 能够让开发、测试、天生环境保持同等,系统原来只是在环境(如Ngnix, JVM,Tomcat,MySQL等)上支配代码,现在把代码和环境一并打包, 运维的事情一下子就简化了。
公司自己购买做事器比较贵,掩护也很麻烦,又难于弹性地增长,那就搞点虚拟的做事器吧,硬盘、内存都可以动态扩展(反正是虚拟的), 访问量大的时候多用点,没啥访问量了就开释一点,按需分配,很方便,这便是云打算的一个场景。
随着韶光的推移,各个公司和系统网络的数据越来越多,都堆成一座大山了,难道就放在那里白白地摧残浪费蹂躏硬盘空间吗?
有人就惊奇地创造,咦,我们利用这些数据搞点事情啊, 比如把数据好好剖析一下,预测一下这个用户的购买/阅读/浏览习气,给他推举一点东西嘛。
可是这么多数据,用传统的办法打算好几天乃至交几个月才能出个结果,到时候黄花菜都凉了,以是也得利用分布式的技能,想办法把打算分到各个打算机去,然后再把打算结果收回来, 时势造英雄,Hadoop及其生态系统就应运而生了。
之前听说过一个大前真个观点,把移动端和网页端都归结为“前端”,我这里造个词“大后端”,把那些用户直接打仗不到的、发生在做事器真个都归结进来。
4、怎么学好后端?
现在无论是前端还是后端,技能领域弗成偻指算,都严重地细分了,以是我认为真正的全栈工程师根本不存在,由于一个人精力有限,不可能搞定这么多技能领域,太难了。
培训机构所说的“全栈”,我认为便是前后端还在拉拉扯扯,藕断丝连,没有彻底分离的时候的“全栈”工程师。
那么问题来了, 后端这么多东西,我该怎么学?
之前写过一篇文章叫做《上天还是入地》,说了学习的广度和深度,在这里也是相通的。
往深度挖掘,可以成为某个技能领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会利用某个工具和框架, 而是担保你可以自己的知识和技能去搞定这个领域的顶尖问题。
往广度发展,各个技能领域都要理解,对付某种需求,能够选取得当的软件和技能架构来实现它,把需求转化成得当的技能组件,让这些组件以得当的办法连接、支配、运行,这也须要持续地学习和不断的履历积累。
末了,以一张漫画来结束吧!
想要在程序员生涯内有更高的造诣的话,C/C++便是一个既可以强化思维能力,又可以打好编程根本的编程措辞,你想要做软件开拓,成为核心程序员的话,学习C/C++的话笔者有一个C/C++的编程千人羣(Q艘索:C措辞编程学习聚拢地(无言建立))你如果觉得自学C/C++措辞有困难的话,有兴趣学习或者理解一下C/C++编程的小伙伴就可以进来互换。
C/C++高等工程师学习路线图: