今天继续前面的话题,说说Java web开发的那点事。Java语言一直作为软件行业的热门语言,近几年在国内各个语言开发占的比重如下:
如今的互联网时代,Java已占据了半壁江山。尤其大型互联网公司对Java开发人员的需求极大,也使得每年都有大批的人进入。但技术更新换代的又很快,好多在传统软件公司呆久了的Coder们,似乎已经与最新的技术脱节。所以要想在这个行业长期混的伙伴们,务必跟上技术更新的步伐。那目前都流行那些技术呢,我大概梳理梳理下吧!
后台服务端基础框架(目前分布式开发已成主流)
分布式治理:dubbo, Spring cloud
分布式协调服务:Zookeeper
消息服务:kafka
服务化框架: Springboot(微服务框架,已成主流), Spring MVC
持久层:Mybatis(使用居多)、Hibernate
项目构建:Maven
前端框架
原型:axure
Html方面:html5、jsp
CSS样式:css、bootstrap、less
JS相关:vue.js 、angular.js、jQuery.js、其它相关js插件
构建:node.js、npm、bower
数据库
关系数据库:mysql、oracle
非关系型数据库:mongdb
内存数据库:redis、memcache
其他
代码管理:git/github
Java开发工具:intellij idea
Android开发:android studio
IOS开发工具:xcode
现在主流的分布式开发,对做互联网的伙伴们应该已经不陌生了。那什么又是分布式呢?其实很简单,就是为了应对并发访问量大的网站,我们对用户界面、后端服务、数据库三个层面分别独立部署运行。甚至对后端服务器模块处理,每个模块独立部署运行。然后由多个子服务组件成后台服务系统。
例如:一个电商平台,为了应对高并发访问。我们把Web端做成静态的Html项目并部署在独立的Tomcat上。后端服务的Java项目里只放控制层(Controller)和业务层(Service),然后Web端跟后端服务通过API通信。然后我们后端的服务系统,再分成若干个子系统(如我们的项目,后端服务分为:系统模块,客户模块,商品模块,订单模块,运营模块,消息模块等近10个),每个模块都一个独立的项目(SpringBoot微服务),独立部署运行,而模块间通过TCP通信交互(Dubbo服务)。比如 订单模块 需要 客服模块 的数据,就通过Dubbo服务调用客户模块业务层服务获取相应信息。
而一般的传统项目,就是典型的MVC架构,把UI跟后端服务放到一个项目中。现在可能有小伙伴想问,那你后端都分模块独立部署了,登录API肯定是某一个子系统的,而客户登录成功后,其他子系统的服务器怎么获取客户的Session信息? 这是一个很好问题,也是面试官常问的问题(如何实现单点登录与Session共享 )。那到底怎么解决呢? 目前主流的方案都是引进第三方缓存服务策略,也就是专门搞一个缓存服务,然后把本该存在本地服务器上的Session,放到这个独立的缓存服务上去,目前最多最流行的第三方缓存服务就是Redis。当用户进行登录操作时,在系统服务子系统中生成token,然后用Token作为Key,客户实体作为Value存入Redis。然后当其他子系统需要登录用信息时,就拿着请求参数传进来的token, 到Redis上去找,这样就达到Session共享的作用。是不是很简单哦!
那可能有人还想问,你用Dubbo做模块间的数据通信,那你用Zookeeper做什么?其实Zookeeper的定义是用来做分布式环境的服务治理,这个又必要了解下Dubbo。
Dubbo是阿里为应对他们的庞大业务体系而出的分布式治理框架,它的结构分为:提供者(Provider)、消费者(Consumer)、注册中心(Registry)、监控中心(Monitor)。而Zookeeper在和Dubbo使用时,它就是所谓的注册中心(Registry),我们把服务提供者提供的服务注册到Zookeeper上去,然后有需要服务的消费者去注册中心上找。如果同一服务有多个提供者(也就是一个Dubbo服务应用启动了多次),这时就是一个服务集群,Zookeeper会对注册进来的提供者进行集群管理(其中一个作为Master,对其他的进行统一协调),有消费者需要服务时,Master会跟据当前集群里提供者的使用情况协调分配谁将提供服务。
看到这里,相信小伙伴们对分布式开发已经有了初步的认识和了解,今天就说这么多,如果想了解更多的分布式应用及涉及的技术,请关注我的公众号,我会继续分享更多的内容,与大家共同学习共同进步。
下期:继续分布式这个话题,以及Dubbo+Zookeeper,Redis,Springboot等开发应用。