Java架构师—大型网站架构演变历程

前言

大型网站一般具备9个特点:

  • 高并发
  • 高可用
  • 大数据
  • 迭代周期短
  • 用户量庞大
  • 可持续发展
  • 安全级别高
  • 可弹性、可伸缩
  • 吞吐量高

网站架构演变历程:单体→集群→分布式→微服务→容器化。大型网站具备高可用、高并发、高性能的架构体系。

架构师需要具备的能力:单体→集群→缓存、搜索→分布式、中间件→微服务、容器化→性能优化。

Java架构师—大型网站架构演变历程_第1张图片


文章目录

  • 前言
  • 一、大型网站的特点与设计宗旨
    • 1.1 大型网站的9大特点
  • 二、大型网站架构演变历程
    • 2.1 静态网站
    • 2.2 引入数据库
    • 2.3 单体架构模式
    • 2.4 节点分离
    • 2.5 引入缓存
    • 2.6 引入集群,负载均衡
    • 2.7 数据库读写分离
    • 2.8 分布式数据库
    • 2.9 引入搜索引擎技术
    • 2.10 微服务阶段:业务拆分
  • 三、架构师需要具备的技术栈和能力
    • 3.1 架构师需要具备的技术栈
    • 3.2 架构师需要具备的能力
  • 四、前后端技术选型
    • 4.1 后端技术选型
    • 4.2 前端技术选型
    • 4.3 技术选型需要考虑的要素
    • 4.4 前后端分离开发模式
  • 总结


一、大型网站的特点与设计宗旨

1.1 大型网站的9大特点

       说起大型网站,很多人会存在一个误区,认为网站访问量大,那就是一个大型网站,其实这只说对了一半。为什么呢?给大家举个例子:
       百度旗下的上网导航网站: hao123。这个网站的用户访问量是非常巨大的,那么它是一个大型网站吗?其实不是。为什么呢?类似 hao123 这样的网站,它们都是提供一个静态网页(可以通过模板技术生成静态页面),用户点击是跳转到其他的网站,它们是根据用户的访问需求提供了一站分类推荐服务。这些网站本身是不具有庞大的数据量的。可以说他们和用户的交互都是单向的,网站通过自身编辑内容对用户提供访问内容,用户只需要点击浏当于 Web1.0时代 的小型网站。
       那么我们再来看一下天猫和京东,这两个网站无疑都是大型网站,首先他们都具有庞大的访问量,不论是天猫双11或是京东618,用户的请求量都是十分巨大的。再者,不仅仅访问量大,网站的数据体量也是非常庞大的,拥有海量数据,并且可以支持大数据分析。像每年年底都能通过大数据分析为你提供当年你花了多少钱,预计明年会买什么等等,这些都是大型网站的基本特征。当然,大型互联网站的特点细分下来有很多,接下来我们一起来看一下:

  • 高并发,流量大: 一个网站从小做到大,业务越来越大,积累的用户也越来越多,那么网站的请求量就势必越来越大。举个例子:
    百度日均访问达到50亿+(据说已经超过谷歌)。
    腾讯QQ早就突破1亿用户同时在线 。
    淘宝双11交易金额达到2000多亿人民币。
  • 高可用:大型网站有一个必须达到的标准,就是高可用。什么是高可用,就是假设服务器宕机了,这个时候用户就无法访问,我们必须保证网站稳定地向用户提供7*24小时不间断的服务,哪怕有服务器节点宕机了,这个时候备用机也会替换当前不可用的服务器节点,确保服务正常访问。
  • 大数据:通过大量服务器以及存储系统管理海量数据,比如阿里在全国各地有上千甚至上万台服务节点。数据多了,那么就可以做大数据分析了,比如为每个画像,不论是用户购买习惯,还是用户未来预计会购买的商品,都能做到一步步的分析。当然图片数据也是数据,当你上传了图片,网站会通过人工智能来分析你的图片。无论是人物图,风景图还是宠物图,都会做到精确的分析。
  • 敏捷开发,迭代快:大型网站的用户量必然是会很多的,为了提高用户体验,优化用户各类操作,形形色色的需求都会被产品人员提出,通过头脑风暴、研讨会等方式角逐出一些非常好用的功能模块,与此同时,开发人员根据需求快速迭代,当然测试与运维也会跟进。一般来说1~2周会快速迭代一次。
  • 用户体系庞大:既然一个大型网站的用户量是非常大的,那么这些用户不可能都分布在同一个地区,他们都是分散的个体,分布在全国各地,甚至全球各地。比如通过淘宝和物流,你可以把商品卖到很偏远的农村或者山区,当然这些偏远地也能通过网站把自家的特产,卖向全国各地。
  • 可持续升级:任何大型网站都不是一蹴而就的,都是从最初最简单的版本一步一步迭代出来的,很多初创公司都会有这样的误区,一上来就搞一个高大上的架构,目标tps达到千万。淘宝初期,是从马云老师家里诞生的;苹果公司诞生于车库;谷歌诞生于斯坦福大学宿舍,随后搬入车库。他们刚推出的时候都是非常简单的网站。
  • 安全防范:正所谓树大招风,你越牛叉,就愈会有黑客或者同行来攻击你,所以这对运维来说也有相当大的挑战,之前就存在网站被黑客攻击勒索比特币,出现这样的问题是因为服务器漏洞,比如上传图片,没有做到限制文件类型,只在前端判断,却没有在后端判断,导致黑客可以直接攻击API接口,把PHP或者其他可植入脚本上传到服务器运行,这是非常危险的。
  • 弹性扩展:淘宝双11在并发量剧增的时候,可以通过增加服务器来扩容,从而引导剧增的流量;微博里若某明星结婚,流量也会剧增,这个时候服务器都是可以动态地增加,来实现动态扩容。不需要的时候适当减少服务器就行。
  • 吞吐量高,响应速度快:一个系统数据量一旦大了,那么它的响应速度会比较慢,这会影响用户体验。所以一个大型网站也必须保证用户每次的请求响应是很快的,虽然这个网站背后可能有上百上千台服务器,但是对于用户来说是透明的,他是不知道的。

二、大型网站架构演变历程

2.1 静态网站

       静态页面网站,web1.0里常见的模式,服务器和用户无交互,单向访问。
Java架构师—大型网站架构演变历程_第2张图片

2.2 引入数据库

       引入数据库:web2.0时代,用户与服务器进行双向交互。用户可以编辑数据。
Java架构师—大型网站架构演变历程_第3张图片

2.3 单体架构模式

       早期传统Java Web开发模式:应用程序,数据库,文件服务器都部署在一台服务器中。流量不大,无压力。应用程序采用MVC架构。
Java架构师—大型网站架构演变历程_第4张图片

2.4 节点分离

       流量增多,服务器和数据库乏力。将文件服务器和数据库服务器和应用程序分离。不同的服务器充当不同的角色,增加并发能力。
Java架构师—大型网站架构演变历程_第5张图片

2.5 引入缓存

       用户查询量增多,占用数据库资源。引入缓存中间件,用户绝大多数的查询请求缓存中间件,保护数据库,请求响应速率加快。
Java架构师—大型网站架构演变历程_第6张图片

2.6 引入集群,负载均衡

       单节点部署在用户访问量增加的情况下可能存在宕机的情况,引入集群:应用集群、文件服务器集群、缓存集群。负载均衡:采用算法进行负载均衡访问节点服务器。
Java架构师—大型网站架构演变历程_第7张图片

2.7 数据库读写分离

       用户达到百万,千万级别。大约有80%数据读操作。数据库采用读写分离进行数据库集群部署。数据同步:主库定时同步数据至从库。
Java架构师—大型网站架构演变历程_第8张图片

2.8 分布式数据库

       分库分表阶段,数据库做了集群,需要用分布式主键进行数据同步。
Java架构师—大型网站架构演变历程_第9张图片

2.9 引入搜索引擎技术

       满足用户的多样化检索需求,引入搜素引擎技术,屏蔽掉与数据库的连接,保护数据库。
Java架构师—大型网站架构演变历程_第10张图片

2.10 微服务阶段:业务拆分

       将不同的业务线进行拆分,采用分布式部署。
Java架构师—大型网站架构演变历程_第11张图片


三、架构师需要具备的技术栈和能力

3.1 架构师需要具备的技术栈

Java架构师—大型网站架构演变历程_第12张图片

3.2 架构师需要具备的能力

  • 技术全面、有广度
  • 关注前言技术
  • 全局观、预判
  • 把控团队、忙而不乱
  • 系统分解与模块拆分
  • 指导与培训
  • 沟通与协调能力
  • 抽象、举例、画图
  • 软技能

四、前后端技术选型

4.1 后端技术选型

技术选型 SpingBoot vs SpringMVC

  • SpringMVC是框架,SpringBoot是工具
  • 从配置繁琐(xml)到零配置(yml)
  • SpringBoot集成了多样化中间件[*-stater]
  • 从外置tomcat变为内置tomcat

Struts

  • 安全漏洞
  • 请求变量共享
  • Filter拦截
  • 非Spring官方自产自销

4.2 前端技术选型

  • MVVM开发模式
  • Jquery、VUE.JS
  • html
  • css

4.3 技术选型需要考虑的要素

  • 切合业务
  • 社区活跃度
  • 团队技术水平
  • 版本更新迭代周期
  • 试错精神
  • 安全性
  • 成功案例
  • 开源精神

4.4 前后端分离开发模式

Java架构师—大型网站架构演变历程_第13张图片
Java架构师—大型网站架构演变历程_第14张图片

总结

架构师需要具备工程化思维模式,了解大型网站的架构体系,微服务的由来。

你可能感兴趣的:(Java架构师之路,java,架构)