这个问题源自于QQ网民,句这段话想不通,干脆写个该文。
我刚开始做Web合作开发的这时候,显然没后端,后端之说。
原因很单纯,这个这时候服务端标识符就是一切:拒绝接受应用流程的允诺,同时实现销售业务方法论,出访资料库,用JSP聚合HTML,然后发送到应用流程。
即便后来Javascript在应用流程中加进了一些AJAX的效用,那也是Toothukudi,当然若非。因为网页的HTML主要还是用简而言之“套模版”的形式聚合:美术设计聚合HTML模版,合作开发人员用JSP,Veloctiy,FreeMaker等技术把静态的内容加进上来,Chavanges。
这个这时候最盛行的图是这个模样:
在起初的J2EE管理体系中,这个links可更为重要是应用流程中运转的网页,还包括Java写的图形界面端,只是Java在图形界面端太唉, 没发展起来。
每一合作开发人员都是简而言之“全栈”技师,不仅要搞掂HTML, JavaScript, CSS,更要同时实现销售业务方法论,撰写出访资料库的标识符。要到布署的这时候,就把所有的标识符打为一个WAR包,往Tomcat选定的产品目录一扔,试验一下没问题,关灯回去!
不缺钱的公司会把流程布署到Weblogic,Websphere这样的ArcGIS中,还会用上矮小上的EJB。
虽然看上来生活“单纯”又“悠闲”,但事实上也需要同时实现那些明快的、不讲方法论的销售业务需求,苦逼的其本质并没改变。
1其间端分立随着大家对应用流程网页的听觉和可视化要求愈来愈高,“套模版”的形式慢慢难以办到,这个简而言之的links慢慢地北迁到应用流程之中去了,一批像Angular, ReactJS等等的架构兴起,其间端分立了!
后端技师只负责提供接口和数据,专注于销售业务方法论的同时实现,后端取到数据后在应用流程中展示,各司其职。
像Java这样的语言很适合去同时实现复杂的销售业务方法论,尤其是一些MIS系统,行业软件如税务、电力、烟草、金融,通信等等。 所以剥离links,只做后端挺合适的。
但是如果仅仅是同时实现销售业务方法论,那后端也不会需要这么多技术了,搞掂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怎么学?现在无论是后端还是后端,技术领域多如牛毛,都严重地细分了,所以我认为真正的全栈技师显然不存在,因为一个人精力有限,不可能搞掂这么多技术领域,太难了。
培训机构所说的“全栈”,我认为就是其间端还在拉拉扯扯,藕断丝连,没彻底分立的这时候的“全栈”技师。
那么问题来了, 后端这么多东西,我该怎么学?
之前写过一篇该文叫做《上天还是入地》,说了学习的广度和深度,在这里也是相通的。
往深度挖掘,可以成为某个技术领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会使用某个工具和架构, 而是保证你可以自己的知识和技术去搞掂这个领域的顶尖问题。
往广度发展,各个技术领域都要了解,对于某种需求,能够选取合适的软件和技术架构来同时实现它,把需求转化成合适的技术组件,让这些组件以合适的形式连接、布署、运行,这也需要持续地学习和不断的经验积累。
最后,以一张漫画来结束吧!
(完)
你看到的只是冰山一角, 更多精彩该文,请移步《2016该文精华》或者《2017上半年该文精华》
码农翻身
用故事讲述技术