Posted in Java, 技术

五、网站高可用架构

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


高可用架构

    主要手段:数据和服务的冗余备份及失效转移。

42b04b4f-0228-44e1-b0a0-9a6db3392de2

负载均衡通过心跳检测监控服务器不可用。

其机制,实现服务器可用实时监控,自动转移,心跳检测。利用负载均衡

906507aa-df96-4723-ba5c-fbbd7379d290

Session集群

1.Session复制

78d9fa72-eca3-4345-885e-e6560a254126

2. Session绑定

利用负载均衡的源地址Hash算法实现。

649f979a-b05e-45ee-a0cc-f546637ed0c7

3. 利用Cookie记录Session

3269f531-2bb7-4a15-bc9c-785683dff255

4.Session服务器

667425fb-2216-4704-9e23-39072659f52b

Posted in Java, 技术

四、瞬时响应:网站的高性能架构

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books

网站性能指标:响应时间吞吐量

网站性能测试

    不同视角下的网站性能

    用户视角的网站性能

    前端架构优化手段,通过优化页面HTML样式,利用浏览器的并发和异步特性,调整浏览器缓存策略,使用CDN服务,反向代理等手段。

    缓存加快数据读取,集群提高吞吐能力,异步消息加快请求响应及实现削峰

    建设优化骨干网,使用高性能服务器

测试指标

    响应时间,并发数,吞吐量(TPS QPS),性能计数器

前端性能优化

    1. 减少HTTP请求:合并css,合并js合并图片

    2. 使用浏览器缓存:HTTP头 Cache-Control 和 Expires

    3. 启用压缩:HTML CSS JS — GZip

    4. css 放在页面上面 js放在页面下面

    5. 减少Cookie传输

系统上层,三步走吧:缓存集群异步

分布式缓存架构

    JBoss Cache更新同步

b16e039d-8390-4f12-966c-2c547be393c7

    Memcached互不通信

9f36ed3f-63e0-4932-9775-46b3b00998d0

异步操作

1f20a927-c7da-47ec-a0ca-b28494de0b2a

代码级别

    1.多线程 : IO CPU

    2.资源复用

    3.数据结构

    4.GC

B+树

LSM树

HFDSb20a2432-ac65-4c08-92dd-c4702330ff27

5bb90e42-7b1d-4541-95ba-caa8e4c8ffec

acf281f2-92a1-4275-99f7-497cd8f10a8d

Posted in Java, 技术

三、大型网站核心架构要素

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


软件架构,有关软件整体架构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

性能

    在浏览器端通过浏览器缓存页面压缩,合理布局页面,减少Cookie传输等改善性能。

    CDN反向代理服务器,缓存热点文件

    应用服务端,本地缓存分布式缓存(缓存的主从备份热备份

    代码层,多线程和改善内存管理

    数据库服务端,索引缓存SQL优化

可用性

    网站可用的主要的手段是冗余。多台服务器数据多台互相备份,任何一个宕机都不会影响应用的整体可用。

    对应用服务器,多台服务器通过负载均衡组成一个集群共同对外服务

    对于存储服务器,由于其上存储着数据,需要数据进行实时备份

    发布验证,自动化测试,自动化发布,灰度发布

伸缩性

    伸缩性是指通过增加服务器,缓解不断上升的用户并发访问和不断增加

    改进缓存路由算法保证缓存数据的可访问性

扩展性

   如何设计网站的架构使用其能快速的响应需求变化

    网站可扩展性架构主要手段:事件驱动架构分布式服务

安全性

    安全架构是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。

小结

    性能,可用性,伸缩性,扩展性和安全性是网站架构最核心的几个要素。

Posted in Java, 技术

二、大型网站架构模式

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books

网站架构模式

    分层

横向维度,每个部分负责单一的职责。上层对下层依赖和调用。

应用层,服务层和数据层

    分割

网站越大,不同功能和服务分割出来形成高内聚低耦合模块单元。

    分布式

分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。

数据在分布式环境中保持数据一致性非常难,分布式难以保证。

分布式应用和服务、分布是静态资源、分布式数据和存储、分布式计算、并发和协同的分布式锁。

Zookeeper 的典型的应用场景(配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等)

    集群

多台服务器部署相同应用,通过负载均衡向外提供服务。

    缓存

缓存就是放在离计算距离最近的位置以加快处理速度。

CDN:内容分发网络 、反向代理、本地缓存、分布式缓存。

缓存种类:1. LocalCache(独立式): 例如Ehcache、BigMemory Go 2. Standalone(单机)  3. Distributed(分布式):例如Redis-Cluster, memcache集群等等

    异步

一个重要目标和驱动力是降低软件耦合性。

一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

单一服务器内部通过多线程共享内存队列方式实现异步:处理业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理。

分布式中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看做内存队列的分布式部署。

异步架构(生产者消费者模式),异步消息队列的特性:可用性,加快网站响应和消除并发访问高峰。

    冗余

数据库定期备份,存档保存,实现冷备份

数据库进行主从分离,实时同步实现热备份。

    安全

web安全 《白帽子讲安全》 吴瀚清

架构模式在新浪微博的应用

5d7cb605-6b21-4aaf-844a-fbc4a03bdd45

    异步推拉模式、多级缓存策略

小结

    好的设计绝对不是模仿,不是生搬硬套某个模式。


欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket

Posted in Java, 技术

一、大型网站技术架构演化

Writer      :BYSocket(泥沙砖瓦浆木匠)

2016年的书 — A Year Of Books


大型网站系统的特点

  • 1、高并发,大流量
  • 2、高可用:7*24小时不间断服务,不宕机

  • 3、海量数据储存及管理

  • 4、网络复杂

  • 5、安全性

  • 6、易扩展,可伸缩:需求快速变更,发布频繁

  • 7、渐进式发展:脸谱网是宿舍,谷歌是斯坦福大学实验室,淘宝是马云家

一句话,高可用,高性能,易扩展,可伸缩且安全的网站。

大型网站架构演化发展历程

1、初始阶段

    单机服务器:应用程序+数据库+文件都在一台服务器上。

  • 2、应用服务和数据服务分离

    应用服务器,文件服务器和数据库服务器。

中间通过通信的是:HTTP/Socket

  • 3、缓存

    二八定律。核心集中在百分之20

    缓存分两种:应用服务器上的本地缓存 和 缓存在专门分布式缓存服务器的远程缓存

    其中Ehcache 简介:(通过RMIJGroupsJMS进行的异步或同步的缓存复制、支持的通过RMI、JGroups或JMS进行的异步或同步的缓存复制、可靠的分发:使用TCP的内建分发机制、面向资源的RESTful,还有就是SOAP)

  • 4、应用服务器集群

    集群是常用手段,实现系统的可伸缩性。

    通过负载均衡调度服务器,将请求分发任何一台服务器。

  • 5、数据库读写分离

    读部分(缓存不命中或者过期) 和 全部写操作要访问数据库

    主从热备-数据库同步

  • 6、反向代理nginx CDN加速网站响应

    原理:缓存

    CDN:就近的网络提供上机房。反向代理缓存这用户请求的资源。

  • 7、分布式文件系统分布式数据库系统

    单表数据规模很大的情况,常用手段是业务分库。

8、NoSQL搜索引擎

    数据存储及大规模数据的检索

    NoSQL场景: 场景:储存用户信息,比如会话、配置文件、参数、购物车等等。这些信息一般都和ID(键)挂钩,这种情景下键值数据库是个很好的选择。

  • 9、业务拆分

    分而治之,业务分成各个产品线。然后各个应用服务器。

    应用之间通过超链接或者消息队列进行数据分发。

10、分布式服务

    SOA、云服务

小结

云计算服务,可以让一切技术资源:计算,存储,网络按需购买即可。

欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

微         博:BYSocket  豆         瓣:BYSocket  FaceBook:BYSocket  Twitter    :BYSocket