分享

细数后台开发的技术栈

 温暖醇厚 2019-03-25

很多同学对于数据结构、算法、网络编程这些基础课程掌握得都很好,但有不少人到了实际的项目开发时就蒙蔽,不知道整个软件系统的体系和流程,个人认为首先对整个过程有个大致的理解,再逐一对这些技术去进行深入的学习是很有利的。首先自我介绍下,笔者从事JAVA开发,也只是个小白,有很多技术同样也没有很深入地去学习,有些理解不当的地方欢迎指正,一起学习。另外,最近会一直更博分享自己各项技术的学习心得,欢迎大家一起交流。

一、前端技术

笔者认为后台开发人员掌握一定的前端技术是必要的,作为JAVA开发最起码的JSP、JQuery、BootStrap这些你得有起码的了解。除此之外,前后端的交互技术,AJAX、JSON、JSONP也是必须了解和掌握的。

二、通信协议
通信协议就跟上面说的网络编程这门课程有很大的关系,通信协议通俗一点说就是:客户端和服务器通信的格式,大家都知道报文是二进制的,而协议的作用就是规定了某一位或某几位二进制串的作用,规定了报文应该按照怎么样的格式来编码。如果违反了这个协议,那么报文是不可能被客户端或服务器正确解码的。

大家最熟悉的协议大概就是HTTP,HTTP协议具体的报文格式也不需要再过多的介绍了。在这里,大家可以思考一个问题,如果一个公司或者实验室内部调用的接口,是不是也需要HTTP协议来通信呢?笔者认为这是一个最差的方案,因为HTTP的报文头部比较长,内部的接口调用是不需要那么复杂的头部的,所以一般采用的是RPC协议。

RPC全称远程过程调用,通过它可是实现一台服务器去调用另外一台服务器上的方法,是基于TCP/IP协议上的一个协议。举个栗子,B服务器上有b1()和b2()两个方法,首先需要向服务注册与发现设备进行注册,A服务器想要调用b1()时,向服务注册与发现设备查询b1()方法所属服务器的IP和端口,得到后,将A服务器的请求路由到该IP的制定端口上。那么通信协议在这个流程中的作用是什么呢?A服务器想要请求b1()方法,他的请求发送到服务注册与发现设备之后,该设备需要通过规定的通信协议来识别该请求报文具体请求的服务名,由此来查询该服务的IP及端口,这个过程叫做路由。HTTP协议中,是通过URL来进行路由的。在RPC过程中,我们一般使用自己定义的协议来减少报文的长度,最简单的方法是通过一个唯一的整形来进行路由,具体的路由方案有很多,这里不再过多赘述。所以我们来总结一下,通信协议规定了通信的格式,他可以规定某几位为路由数,某几位为请求报文的body,一个很简单的通信协议头部有路由字段就可以满足了,相比于HTTP的头部而已,轻量了很多。body里面存的就是请求的具体参数和响应结果了,该区域一般也是有数据传输协议来进行数据的编码的,json是一种选择,而另一种更好的选择就是谷歌的protocol buffer,相比于json而言,它是二进制的,更轻量,具体的特性和使用方法会在后面的文章中进行介绍。笔者最经常用的一个RPC框架是Thrift,也会在后面的文章中将会给大家介绍。

三、负载均衡
负载均衡这个词,相信大家接触得都很多。负载均衡就是用多台应用服务器来完成一个业务,通过负载均衡中间件对这些服务器的负载情况进行一个管理及动态的调整,以尽量消除或减少各服务器负载不均衡的现象。还是上一节当中的那个栗子,当B服务器的请求量很大时,一台服务器是无法支撑起整个业务的,于是我们对该服务器做一个扩展,变成三台服务器B1、B2、B3共同来提供服务,他们三台服务器的IP和端口首先都需要向服务注册与发现设备来进行注册,同时这三台服务器的负载量由负载均衡服务器进行管理,这是A服务器对于b1()方法的一个请求到达负载均衡服务器,负载均衡服务器需要去请求服务注册于发现设备该方法的路由地址列表,拿到该列表后从中选择负载量最优的那一台服务器,将A服务器的请求路由至那台服务器上。
在公司里面,负载均衡层一般都由运维负责,笔者还接触不到这些,只能大略地介绍一些,如果大家想要深入地学习,可以先学习下使用nginx来搭建负载均衡服务器。
四、反向代理

反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。通俗点讲,ABC三个人,A想向C问个问题,但是得通过B来进行。A先告诉B,B再去问C,最后B将C的回答转述给A。可能大家会觉得为什么需要这么麻烦的过程呢,A直接问C不就好了。大家这个时候可以打开一个网页,按一下F12,选择network选项卡,然后F5刷新一下网页,在这个选项卡里,会刷出一个列表,这个列表就是你刷新一次网页浏览器需要向服务器发送的请求列表。我们知道,一个HTTP请求是只能请求一个对象的,一个网页里有10个图片就需要请求10次,实际上你刷新一个网页时,大部分的请求都是静态元素,即图片、js或css等文件,如果这些大部分的请求都需要通过应用服务器来完成的话,会给应用服务器带来很大的负担,所以反向代理的作用,就是缓存这些静态文件,当浏览器发送一个请求时,反向代理服务器判断请求内容是否是它缓存内容,如果是,就可以直接将结果返回;如果不是,反向代理再将该请求转发至应用服务器上处理。这样,就减少了应用服务器的负担。常用的反向代理——nginx。

有人可能会说,nginx好厉害啊,项目部署用一台nginx就可以完成负载均衡和反向代理了。实际上是需要两台nginx来架构的,一台放再lvs中负责负载,另一台部署在tomcat前,负责反向代理。

五、业务编程

通过上面四点的介绍,一个请求已经能从客户端发送至应用服务器tomcat上了。接下来就是根据服务器编程完成相应的业务流程。后台常用的开发框架笔者都有接触并且用过不短时间,Stuts2、Spring MVC、Spring、Hibernate、MyBatis这些。一般两套常用的体系是Struts2+Spring+Hibernate和Spring MVC+Spring+MyBatis,很明显Spring的作用不言而喻。这两套体系都是MVC设计思想的体现。对比下这两套体系,Struts2和Spring MVC都是Controller层的框架,后者对初学者更友好一些,而且前者经常出现一些神奇的BUG,公司里面也是很不喜欢使用的,所以强烈推荐的是Spring MVC。Hibernate和MyBatis都是两个比较重用的持久层框架,Hibernate会比Mybatis好入门一些,但是MyBatis会比Hibernate轻量,使用广泛程度也差不多。

六、数据库

数据库需要掌握的:sql语句、索引、explain性能分析等

七、缓存

缓存分本地缓存和缓存服务器。本地缓存指的是将数据缓存下本地的内存中,一般对一些读业务的数据采用本地缓存,推荐大家学习下google的guava cache。缓存服务器的话推荐redis,一个键值对的缓存,比较适合入门

除了上面的这些,还有maven svn git这些工具也是需要掌握的

由于时间和篇幅原因,这篇博文知识大致地进行了名词介绍,后面会为大家详细介绍



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多