大型网站后端架构设计

后端架构设计涉及不少方面,而且跟网站规模有很大关系,规模越大涉及技术越多,下面介绍一下超大型网站后端架构设计,以及包含哪些核心技术。java

分层是架构设计一种重要方式,经过分层来说问题很高隔离,后端架构能够分为三层,一层是接入层、服务层、存储层。mysql

 

接入层经过LVS、HAProxy等技术将请求接入,将请求量转发给后边nginx+lua,在这一层经过lua扩展构建一些业务逻辑,性能很高。nginx

服务层包含http 服务,http服务通常实现组合逻辑,Tomcat是http服务所在容器,http服务通常实现好比填充sku 属性、描述、图片、说明、介绍等信息业务逻辑。redis

服务层RPC服务通常是更为基层服务,好比提供个性化推荐BI服务,返回推荐sku列表或者文章素材列表。RPC服务实现服务横向扩展,以及实现业务纵向拆分,可以使团队按职能进行拆分。RPC服务目前用的比较多的是dubbo、spring cloud。spring

服务层包含Monitor监控服务,监控包含多个纬度。线上服务业务纬度,对线上服务性能好比tp99指标,对于可用率是否100%状况进行监控,而且能够设置报警阈值,当监控达到阈值进行相应报警。jvm监控,对jvm内存、cpu、线程数等状况进行监控。docker监控,对docker内存、进程数、线程数、网络、磁盘等进行监控。经过以上技术手段实现对线上服务可用率、性能、jvm、docker等资源使用状况监控。可以预防线上服务问题,以及线上出现问题后可以快速定位问题,查找问题缘由从而解决问题。sql

服务层Zookeeper能够实现注册中心和配置管理下发等。Zookeeper做为分布式系统核心协做组件,在分布式系统中起着很重要做用。在服务端开发中Zookeeper也起着核心做用,好比用做微服务注册中心,管理微服务注册信息。或者基于Zookeeper实现配置管理工具,方便对于线上服务配置管理以及配置下发,从而实现秒级降级以及秒级配置更新。Zookeeper还能够用做分布式锁,协调多个微服务同步操做。好比微服务缓存更新,能够经过Zookeeper协调,避免后端数据库压力过大致使数据库服务过载或崩溃。docker

存储层memcached、redis能够用来做为缓存服务提高访问性能,在某些场景下redis也能够做为主要存储,好比推荐系统,访问量大,可是对于数据事务性要求不高,做为惟一存储时,须要注意缓存系统不稳定或性能问题,须要服务本地缓存通用数据以做为兜底,避免缓存不可用致使服务不可用。数据库

存储层mysql、oracle做为关系型数据存储,使用场景是订单、支付等事务强需求场景下,这种场景下分布式nosql数据库对事务支持自己是不够好的,比不上传统数据库,这种场景下mysql、oracle是最优选择。编程

存储层hbase是一种基于列式存储,方便基于列进行数据分析,分析单列不须要涉及全部列性能会快不少。但不适合基于行查出全部列,由于列存储在不一样位置,根据行取出全部列性能会比较差。后端

以及基于Rocksdb类分布式KV存储,存储基于磁盘能够进行持久化存储,优势存储量大而且能进行持久化,缺点是基于磁盘以及数据结构等多种因素,随机读性能没有redis那么高。因此适合写多读少场景。能够结合redis缓存,做为redis后端的持久化存储。

ES做为全文检索服务,适合于全文检索服务,Mysql就不适合做为全文检索使用,由于一篇文章,每一个词都有可能被检索,所有构建索引索引会很是很是大。

java语言栈Spring是事实上Bean管理、以及托管总体配置工业标准。jdk是java基石,支持java运行以及庞大工具包,来支撑业务快速开发。jdk中容器、多线程、锁、io、nio等。方便应用开发实现高性能网络、磁盘等设备操做,方便应用使用多线程技术。

每一种技术都有它的适用场景,架构设计时要根据实际状况去用,有不少trade off的事情,不要强行复用,要根据实际场景不管是编程语言,仍是存储,仍是消息队列技术等,都要根据实际场景去合理使用,才能发挥出技术最大价值。

相关文章
相关标签/搜索