eshop1-大型电商架构演进
1. 项目初期
2. 服务器分离
以上的服务分离架构,即使文件服务crash 了,但是application server 和 Database Server 继续可以访问运行
3. 基于并发访问越来越高,数据库压力越来越大,引入分布式缓存
80%的数据访问基于20%的业务数据上,28原则
分布式缓存思考
(1).那种业务数据适合远程分布式缓存
(2).那种业务数据适合本地缓存
(3).分布式缓存扩容的时候存在的问题,如何解决,算法有哪些
(4).基于这种架构,我们需要解决的问题
4. QPS 访问越来越高,Application Server 将会出现瓶颈,增加负载均衡调度服务器
思考的问题
(1).负载均衡的调度策略有哪些,各有什么优缺点,例如轮训(实现简单,不考虑服务器的处理能力),权重(考虑服务器处理能力),地址散列(原IP地址散列,目标地址散列, 实现同一个用户访问同一个服务器)
(2).假设一个场景,一个用户第一次访问A 服务器,session信息被存储到A服务器上,但是由于负载均衡服务器,同一个用户第二次访问的时候,访问了B服务器,但是B服务器上没有用户的session信息,因此解决session管理的问题
上图session 管理缺点
(1).某一个application server 重启了,这时候session 全部消失
(2).第二种session解决方案,session copy
(1). 解决session共享问题
(2).缺点Cookie长度是有限制的
(3).Cookie 保存在浏览器上,不安全
因此出现了一下方案
缺点
(1).Session server 是单点,如何保证系统正常的运行
(2).我们可以考虑session server 集群
(3).适用于Web服务器session 服务器多的场景
5. 当用户量达到一定数量时,数据库就会出现瓶颈,如何解决,数据库的读写分离
应用接入多数据源
应用程序也应该需要相应的变化
data access module 数据写入模块,是开发人员不知道读写分离的存在,多数据源对业务代码无侵入性
当数据的IO非常大的时候,我们的主库与附库在跨机房传输的时候,又是一个要解决的问题?
6. 增加CDN 与反向代理服务器,可以很好的解决不同的地区访问速度的问题
反向代理可以缓存用户数据,这个时候我们的文件服务器可能会出现了瓶颈
7. 文件服务器分布式集群
分布式文件系统
(1).是否需要备份服务器
8. 这个时候,数据库又出现瓶颈,专库专用的原则(micro service的设计理念),进行数据的垂直拆分,解决写数据并发量大的问题
问题:
(1). 跨数据库的事务
(2).可以使用分布式事务
(3).或者去掉事务,或者不使用强制性事务
随着数据量,访问量的变大,我们每个业务的数据量已经达到单个数据库的瓶颈,这个时候进行数据库水平拆分
解决单数据库的问题
拆分的时候注意点:
(1). SQL的路由问题
(2).既然user表进行了分库,但是面临的另外一个涉及分页的问题
9. 当解决这以上问题之后,我们的搜索又会出现瓶颈,把应用服务器的搜索功能独立出来,架设一个搜索引擎服务器
data access module 链接着数据库,搜索引擎,NoSQL Server
该架构也不是最后的架构,根据实际的业务来决定,例如以上的架构负载均衡服务器是一个单点,因此仍然可以继续提升优化空间
eshop1-大型电商架构演进的更多相关文章
- 大型电商业务架构 IT大咖说 - 大咖干货,不再错过
大型电商业务架构 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakashuo/new/dakalive/detail/591
- [刘阳Java]_大型电商网站架构技术演化历程
今年的双十一已经过去一段,作为技术小咖啡,我们先说一下大型电商网站的特点:高并发,大流量,高可用,海量数据.下面就说说大型网站的架构演化过程,它的技术架构是如何一步步的演化的 1. 早期的网站架构 初 ...
- Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客
Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...
- C# 大型电商项目性能优化(一)
经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framewor ...
- 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性
个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...
- C#大型电商项目优化(二)——嫌弃EF与抛弃EF
上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...
- 小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫:Selenium 获取某大型电商网站商品信息
目标 先介绍下我们本篇文章的目标,如图: 本篇文章计划获取商品的一些基本信息,如名称.商店.价格.是否自营.图片路径等等. 准备 首先要确认自己本地已经安装好了 Selenium 包括 Chrome ...
- vue大型电商项目尚品汇(前台篇)day01
学完vue2还是决定先做一个比较经典,也比较大的项目来练练手好一点,vue3的知识不用那么着急,先把vue2用熟练了,vue3随时都能学. 这个项目确实很经典包含了登录注册.购物车电商网站该有的都有, ...
随机推荐
- 循环读取寄存器(QSFP-DD)并且分别保存log
#!/bin/bash ####################################################################### #Created by: Bin ...
- 安装luarocks安装驱动
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel--安装lua前提条件 LuaSQL 可以使用 LuaR ...
- spring boot 是如何启动 tomcat
Spring boot 的启动类启动后,tomcat 容器.Spring mvc .spring 事务等等第三方依赖也已经自动启动,那么spring boot 是如何启动的第三方依赖? 以spring ...
- 最近公共祖先(LCA)问题
目录 最近公共祖先 1.向上标记法 2.树上倍增法 3.Tarjan算法 最近公共祖先 定义:给定一颗有根树,若结点 z 既是 x 的祖先,也是 y 的祖先,则称 z 是 x,y 的公共祖先.在 x, ...
- 搭建python虚拟环境virtualenv
virtualenv 是一个创建隔离Python环境的工具,创建虚拟环境运行,达到节省本地运行空间的目的. 安装vitualenv # pip install virtualenv 创建一个虚拟环境( ...
- 141、Java内部类之实例化外部类对象
01. 代码如下: package TIANPAN; class Outer { // 外部类 private static String msg = "Hello World !" ...
- ubuntu14 安装Node.js
@brief ubuntu 安装Node.js @date 2018-06-28 @see Ubuntu 上安装 Node.js(https://www.runoob.com/nodejs/node ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:选择框(Select)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- thymeleaf 在 html和js 中拼接字符串
一.th:text字符串和事件拼接 <span th:text="'Welcome,'+${user.name}"> <span th:text="| ...
- 使用c#调用API入门
使用C#调用windows API入门 一:入门,直接从 C# 调用 DLL 导出 其实我们的议题应该叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数. 2 ...