一个创业公司起步时极可能就两台机器,一台Web 服务器、一台数据库服务器,在一个应用系统中集成了全部功能模块,但随着业务的发展、流量的增加,单应用远远不能知足业务需求。前端
下面咱们一同来聊聊网站架构发展所经历的几回主要演进,包括:从PHP 到Java 的改造、分布式改造、无线化改造、中台的改造、国际化改造。程序员
阶段一 从PHP 到Java数据库
不少网站早期都是基于Linux+Apache+MySQL+PHP 架构的网站,从当时来看,这种很是流行的我的网站架构的确也很是匹配当时的发展状态。PHP 语言的特性是快速发布,从页面渲染到数据库访问,都可以在一个页面里所有搞定。缓存
即便放到今天,这种架构仍然还有不少人在用,它的优势就是很是简单高效,但缺点也很是明显:扩展性和分布式很差,不适合企业级的、复杂业务逻辑的大规模协同开发。服务器
随着网站的发展,你们以为应该将PHP 切换到Java。为何要切换到Java 语言呢?通常来讲,企业选择开发语言会有以下考虑。架构
(1) 语言自己的特性。每种语言开发出来都有它的特性和所适合的场景,像Python、PHP 这类脚本语言很是适合快速简单的开发方式,而Java 则比较适合构建复杂业务逻辑的企业级开发,可是开发效率会比PHP 要差一点。框架
(2) 程序员队伍。企业选择何种开发语言,还要看市场上的人才队伍是否是足够,是否是有很高层次的人才。是否有高层次的人才,取决于当前的行业老大是否是也在用这种语言,好比当前的顶级互联网公司若是在用Java,那么天然这些公司的Java人才比较多,这样,他们的经验能够被快速复制到其余公司中。异步
(3) 语言所对应的工具生态是否完善。一个语言是否有生命力,要看这个语言对应的生态工具是否完善,它的社区是否活跃。由于咱们要用到各类工具,而咱们也不可能本身去写每种工具,所以,是否能方便地利用开源工具,快速提高开发效率也是很是关键的。像如今不少大公司开源了不少Java 的中间件产品,这些中间件能够直接拿来使用,就不须要再从新开发了。分布式
综合以上因素,电商网站选择Java 语言做为主要的系统开发语言是很是合适的。模块化
从PHP 切换到Java 后,整个网站采用WebX+EJB+iBatis+JBoss+Oracle(后面又将EJB 改为Spring)的架构,可是随着业务量的不断增大,存储层的瓶颈暴露出来。
为了解决存储问题,就逐渐用上了很是昂贵的IBM 小型机、Oracle 的数据库以及EMC的高端存储(IOE);并对数据库作了分库的拆分,分布式缓存(Tair)也随之诞生,分布式文件系统TFS 开始出现,CDN 也慢慢创建了。
阶段二 分布式改造
所谓分布式改造,就是尽可能让系统无状态化,或者让有状态的信息封装在必定范围内,以避免限制应用的横向扩展。简单来讲,就是即使某个应用的少数服务器“宕”掉,也不会影响总体业务的稳定性。
要实现应用的分布式改造必须先解决如下几个问题。
(1) 把应用微服务化:即将大量粗粒度的应用逻辑拆小,作服务化改造。
(2) 必须先创建分布式服务框架。必须具有分布式RPC 框架、异步消息系统、分布式数据层、分布式文件系统、服务的发现、注册和管理。
(3) 必需要解决分布式Session 问题。
为了作业务的服务化改造,咱们大量拆分了当时的业务系统,造成了商品中心、交易中心、用户中心、店铺中心。这些服务做为底层服务供上层的前台系统调用,此时的系统架构变成了下面的形式。
如今来看,系统的分布式改造为网站接下来5 年的发展奠基了很好的基础,整个网站的扩展性很是好。几乎每一个初创企业都必须经历一次分布式化的改造,才能为企业的长期发展奠基基础。笔者前面说起的几个重要的中间件产品和关键的分布式Session 等技术在《深刻分析Java Web 技术内幕(修订版)》一书中有详细的介绍,感兴趣的读者能够自行去学习了解。
阶段三 无线化改造
到了2013 年,无线技术已经很是火爆了。在此以前,无线的业务老是跟着PC 走,基本上是PC 作好后无线再复制一份,并且无线和PC 还不是同一个前台系统,致使一个功能要作两遍,而且无线部门的开发人员原本就很少。这些给业务的发展带来不少问题。所以2013 年末,启动了All in 无线项目,目标就是用一套系统、一套架构快速支撑多端的个性化,并在服务端作了不少模块化和组件化的改造。
随着无线技术的发展,咱们也开始尝试一些新技术,最具表明性的就是Node。
Node 在业界很火,前端同窗很是推崇,并且它也大幅提高了前端的开发效率和体验。
目前你们也多方尝试使用Node 技术,而且用在一些业务线上。可是,从今天来看,Node 并无达到咱们想象中的发展前景。这其中有多种缘由,本书的后续章节会专门介绍网站的无线化改造实践,也将分享Node 在实际使用中的一些思考。
通过无线化改造的应用系统架构如图。
阶段四 中台改造
中台这个概念早期是由美军的做战体系演化而来,技术上的“中台”主要是指学习这种高效、灵活和强大的指挥做战体系。电商通过十几年的发展,组织已经庞大而复杂,业务不断细化拆分,也致使野蛮发展的系统愈来愈不可维护,开发和改造效率极低,也有不少新业务不得不重复造轮子,因此中台的目标是为了解决效率问题,同时下降创新成本。
如何一块儿学习,有没有免费资料?
对Java技术,架构技术感兴趣的同窗,欢迎加QQ群:681179158,一块儿学习,相互讨论。
群内已经将知识体系整理好(源码,笔记,PPT,学习视频),欢迎加群免费领取。
扫码加群:681179158 免费领取资料
阶段五 国际化
国际化通常会有两种思路:一种是一套原始代码部署到多个地方,各地的系统基本没有什么关联、保持相互独立,每一个地方再根据本地实际状况作一些个性化的定制。通常来讲,会精简原始代码,减小没必要要的依赖。这种思路在一些跨国公司用得比较多,可是这个对技术要求比较低。
另外一种思路就是咱们所说的国际化,它主要是解决如何将一套系统部署到多地的问题。通常国际化有两个发展阶段:第一个阶段是在国内实现了交易的单元化;第二个阶段是实现了中美的跨国部署。
国际化的本质仍然是要解决如下的通用问题:多语言问题、多时区问题、数据路由问题、全球数据的同步与复制问题。