提交 0837db82 编写于 作者: Y yanglbme

docs(architect): add e-commerce-website-detail-page-architecture.md

电商网站的商品详情页系统架构
上级 14e4cc03
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
本系列知识出自中华石杉,我对这部分知识做了一个系统的整理,方便学习查阅。 本系列知识出自中华石杉,我对这部分知识做了一个系统的整理,方便学习查阅。
😄可以关注石杉老师的微信公众号:**石杉的架构笔记** @shishan100,有很多干货噢~ 可以关注石杉老师的微信公众号:**石杉的架构笔记** @shishan100,有很多干货噢~
## [分布式系统](/docs/distributed-system/distributed-system-interview.md) ## [分布式系统](/docs/distributed-system/distributed-system-interview.md)
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
## 高可用架构 ## 高可用架构
- [Hystrix 介绍](/docs/high-availability/hystrix-introduction.md) - [Hystrix 介绍](/docs/high-availability/hystrix-introduction.md)
- [电商网站详情页系统架构](/docs/high-availability/e-commerce-website-detail-page-architecture.md)
### 高可用系统 ### 高可用系统
- 如何设计一个高可用系统? - 如何设计一个高可用系统?
......
## 电商网站的商品详情页系统架构
### 小型电商网站的商品详情页系统架构
小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入 Nginx 服务器。用户浏览网站页面时,取用一个已经静态化好的 html 页面,直接返回回去,不涉及任何的业务逻辑处理。
![e-commerce-website-detail-page-architecture-1](/img/e-commerce-website-detail-page-architecture-1.png)
- 好处:用户每次浏览一个页面,不需要进行任何的跟数据库的交互逻辑,也不需要执行任何的代码,直接返回一个 html 页面就可以了,速度和性能非常高。
- 坏处:仅仅适用于一些小型的网站,比如页面的规模在几十到几万不等。对于一些大型的电商网站,亿级数量的页面,你说你每次页面模板修改了,都需要将这么多页面全量静态化,靠谱吗?
### 大型电商网站的商品详情页系统架构
大型电商网站商品详情页的系统设计中,当商品信息发生变更时,会将变更消息压入消息队列中。**缓存服务**从消息队列中消费此消息时,发现有信息发生变更,便通过调用接口,获取变更后的数据。将整合好的数据推送至 redis 中。Nginx 获取到最新的缓存数据,并且缓存到 Nginx 自己本地中。
用户浏览网页时,动态将 Nginx 本地数据渲染到本地 html 模板并返回给用户。
![e-commerce-website-detail-page-architecture-2](/img/e-commerce-website-detail-page-architecture-2.png)
虽然没有直接返回 html 页面那么快,但是因为数据在本地缓存,所以也很快,其实耗费的也就是动态渲染一个 html 页面的性能。如果 html 模板发生了变更,不需要将所有的页面重新静态化,直接将数据渲染进最新的 html 页面模板后响应即可。
\ No newline at end of file
# 用 Hystrix 构建高可用服务架构 ## 用 Hystrix 构建高可用服务架构
## Hystrix 是什么? ### Hystrix 是什么?
在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是**依赖服务**,有的时候某些依赖服务出现故障也是很正常的。 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是**依赖服务**,有的时候某些依赖服务出现故障也是很正常的。
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些**调用延迟**或者**依赖故障****容错机制** Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些**调用延迟**或者**依赖故障****容错机制**
...@@ -9,14 +9,14 @@ Hystrix 通过将依赖服务进行**资源隔离**,进而阻止某个依赖 ...@@ -9,14 +9,14 @@ Hystrix 通过将依赖服务进行**资源隔离**,进而阻止某个依赖
总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。 总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。
## Hystrix 的历史 ### Hystrix 的历史
Hystrix 是高可用性保障的一个框架。Netflix(可以认为是国外的优酷或者爱奇艺之类的视频网站)的 API 团队从 2011 年开始做一些提升系统可用性和稳定性的工作,Hystrix 就是从那时候开始发展出来的。 Hystrix 是高可用性保障的一个框架。Netflix(可以认为是国外的优酷或者爱奇艺之类的视频网站)的 API 团队从 2011 年开始做一些提升系统可用性和稳定性的工作,Hystrix 就是从那时候开始发展出来的。
在 2012 年的时候,Hystrix 就变得比较成熟和稳定了,Netflix 中,除了 API 团队以外,很多其他的团队都开始使用 Hystrix。 在 2012 年的时候,Hystrix 就变得比较成熟和稳定了,Netflix 中,除了 API 团队以外,很多其他的团队都开始使用 Hystrix。
时至今日,Netflix 中每天都有数十亿次的服务间调用,通过 Hystrix 框架在进行,而 Hystrix 也帮助 Netflix 网站提升了整体的可用性和稳定性。 时至今日,Netflix 中每天都有数十亿次的服务间调用,通过 Hystrix 框架在进行,而 Hystrix 也帮助 Netflix 网站提升了整体的可用性和稳定性。
## Hystrix 的设计原则 ### Hystrix 的设计原则
- 对依赖服务调用时出现的调用延迟和调用失败进行**控制和容错保护** - 对依赖服务调用时出现的调用延迟和调用失败进行**控制和容错保护**
- 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如某一个服务故障了,导致其它服务也跟着故障。 - 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如某一个服务故障了,导致其它服务也跟着故障。
- 提供 `fail-fast`(快速失败)和快速恢复的支持。 - 提供 `fail-fast`(快速失败)和快速恢复的支持。
...@@ -35,7 +35,7 @@ Hystrix 是高可用性保障的一个框架。Netflix(可以认为是国外 ...@@ -35,7 +35,7 @@ Hystrix 是高可用性保障的一个框架。Netflix(可以认为是国外
Hystrix 可以对其进行资源隔离,比如限制服务 B 只有 40 个线程调用服务 C。当此 40 个线程被 hang 住时,其它 60 个线程依然能正常调用工作。从而确保整个系统不会被拖垮。 Hystrix 可以对其进行资源隔离,比如限制服务 B 只有 40 个线程调用服务 C。当此 40 个线程被 hang 住时,其它 60 个线程依然能正常调用工作。从而确保整个系统不会被拖垮。
## Hystrix 更加细节的设计原则 ### Hystrix 更加细节的设计原则
- 阻止任何一个依赖服务耗尽所有的资源,比如 tomcat 中的所有线程资源。 - 阻止任何一个依赖服务耗尽所有的资源,比如 tomcat 中的所有线程资源。
- 避免请求排队和积压,采用限流和 `fail fast` 来控制故障。 - 避免请求排队和积压,采用限流和 `fail fast` 来控制故障。
- 提供 fallback 降级机制来应对故障。 - 提供 fallback 降级机制来应对故障。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册