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-大型电商架构演进的更多相关文章

  1. 大型电商业务架构 IT大咖说 - 大咖干货,不再错过

    大型电商业务架构 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakashuo/new/dakalive/detail/591

  2. [刘阳Java]_大型电商网站架构技术演化历程

    今年的双十一已经过去一段,作为技术小咖啡,我们先说一下大型电商网站的特点:高并发,大流量,高可用,海量数据.下面就说说大型网站的架构演化过程,它的技术架构是如何一步步的演化的 1. 早期的网站架构 初 ...

  3. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  4. C# 大型电商项目性能优化(一)

    经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framewor ...

  5. 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性

    个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...

  6. C#大型电商项目优化(二)——嫌弃EF与抛弃EF

    上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...

  7. 小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. 小白学 Python 爬虫:Selenium 获取某大型电商网站商品信息

    目标 先介绍下我们本篇文章的目标,如图: 本篇文章计划获取商品的一些基本信息,如名称.商店.价格.是否自营.图片路径等等. 准备 首先要确认自己本地已经安装好了 Selenium 包括 Chrome ...

  9. vue大型电商项目尚品汇(前台篇)day01

    学完vue2还是决定先做一个比较经典,也比较大的项目来练练手好一点,vue3的知识不用那么着急,先把vue2用熟练了,vue3随时都能学. 这个项目确实很经典包含了登录注册.购物车电商网站该有的都有, ...

随机推荐

  1. NB-IoT的介绍最终版 !看明白了吗?(转自 top-iot)

    标签: NB-IOT 1  1G-2G-3G-4G-5G 不解释,看图,看看NB-IoT在哪里? 2  NB-IoT标准化历程 3GPP NB-IoT的标准化始于2015年9月,于2016年7月R13 ...

  2. Day1-C-CF-1144A

    简述:给你一串字符,判断是否由连续字母构成且每个字符只出现一次 思路:用set直接储存,判断size和初末位置字母与size的关系即可 代码: #include<iostream> #in ...

  3. RF之目录结构、执行参数、用例标签 -6

    自动化项目的目录结构:        建议的目录结构... 以robot --pythonpath .  tc命令执行tc用例下面所有的用例 builtin库里面的Run Keywords方法实现初始 ...

  4. 解决Python2中文ascii编码的方法

    在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...

  5. 组态DP主站与标准从站的步骤

    分为以下几个部分 第一:组态DP主站与标准从站 分为以下几个步骤 步骤1: 将标准从站ET200 ,ET200在硬件组态软件界面的最右边的PROFIBUS-DP界面里面, PROFIBUS-DP里面是 ...

  6. map的查询和修改方法

    1:map查询的方法 package com.cn.util; import java.util.ArrayList; import java.util.HashMap; import java.ut ...

  7. 如何在adapter 中调用activity的方法

    如何在adapter 中调用activity的方法 2015-08-07 17:06匿名 | 浏览 808 次  iWorkjavaAndroid public class HistoryData e ...

  8. Element 表单校验不消失问题

    由于不好的命名习惯,所以我的:rule   :ref   :model命名就是写了改,改了再写. 直到今天出现了这个毛病就是  “表单验证不消失” 比方说这里的  ‘密码不能为空’,在我已经输入了数字 ...

  9. 1.Neo4j简介(Neo4j系列)

    简介 Neo4j是一个高性能.高可靠性.可扩展.支持ACID事务的图数据库,它基本由Java语言实现,支持数据平台的平滑扩展和过渡,同时能够在多种系统上完成部署,它使用Cypher查询语言对数据进行增 ...

  10. Java得到一个整数的绝对值,不使用任何判断和比较语句,包括API.

    /** * Java得到一个整数的绝对值,不使用任何判断和比较语句,包括API. <br> * 1.不得使用任何API,如Math.abs()等.<br> * 2.不得使用判断 ...