From bd7b9b98bdefefdc0929c719b0f4d35960dba2e7 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Mon, 18 Feb 2019 22:59:26 +0800 Subject: [PATCH] =?UTF-8?q?Create=20=E3=80=90=E9=9D=A2=E8=AF=95=E7=B2=BE?= =?UTF-8?q?=E9=80=89=E3=80=91=E5=85=B3=E4=BA=8E=E5=A4=A7=E5=9E=8B=E7=BD=91?= =?UTF-8?q?=E7=AB=99=E7=B3=BB=E7=BB=9F=E6=9E=B6=E6=9E=84=E4=BD=A0=E4=B8=8D?= =?UTF-8?q?=E5=BE=97=E4=B8=8D=E6=87=82=E7=9A=8410=E4=B8=AA=E9=97=AE?= =?UTF-8?q?=E9=A2=98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...»ç»Ÿæž¶æž„ä½ ä¸å¾—䏿‡‚çš„10个问题.md | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 æž¶æž„/ã€é¢è¯•精选】关于大型网站系统架构你ä¸å¾—䏿‡‚çš„10个问题.md diff --git a/æž¶æž„/ã€é¢è¯•精选】关于大型网站系统架构你ä¸å¾—䏿‡‚çš„10个问题.md b/æž¶æž„/ã€é¢è¯•精选】关于大型网站系统架构你ä¸å¾—䏿‡‚çš„10个问题.md new file mode 100644 index 00000000..9fc9a83b --- /dev/null +++ b/æž¶æž„/ã€é¢è¯•精选】关于大型网站系统架构你ä¸å¾—䏿‡‚çš„10个问题.md @@ -0,0 +1,190 @@ +下é¢è¿™äº›é—®é¢˜éƒ½æ˜¯ä¸€çº¿å¤§åŽ‚çš„çœŸå®žé¢è¯•问题,ä¸è®ºæ˜¯å¯¹ä½ é¢è¯•还是说拓宽知识方法都很有帮助。之å‰å‘过一篇[8 张图读懂大型网站技术架构](https://mp.weixin.qq.com/s?__biz=MzU4NDQ4MzU5OA==&mid=2247484416&idx=1&sn=6ced00d65491ef8fd33151bdfa8895c9&chksm=fd985261caefdb779412974a6a7207c93d0c2da5b28489afb74acd2fee28505daebbadb018ff&token=177958022&lang=zh_CN#rd) å¯ä»¥ä½œä¸ºä¸å¤ªäº†è§£å¤§åž‹ç½‘站系统技术架构朋å‹çš„入门文章。 + + + +- [1. ä½ ä½¿ç”¨è¿‡å“ªäº›ç»„ä»¶æˆ–è€…æ–¹æ³•æ¥æå‡ç½‘站性能,å¯ç”¨æ€§ä»¥åŠå¹¶å‘é‡ã€‚](#1-ä½ ä½¿ç”¨è¿‡å“ªäº›ç»„ä»¶æˆ–è€…æ–¹æ³•æ¥æå‡ç½‘站性能å¯ç”¨æ€§ä»¥åŠå¹¶å‘é‡ã€‚) +- [2. 设计高å¯ç”¨ç³»ç»Ÿçš„常用手段](#2-设计高å¯ç”¨ç³»ç»Ÿçš„常用手段) +- [3. 现代互è”网应用系统通常具有哪些特点?](#3-现代互è”网应用系统通常具有哪些特点) +- [4. 谈谈你对微æœåŠ¡é¢†åŸŸçš„äº†è§£å’Œè®¤è¯†](#4-谈谈你对微æœåŠ¡é¢†åŸŸçš„äº†è§£å’Œè®¤è¯†) +- [5. 谈谈你对 Dubbo å’Œ Spring Cloud 的认识\(两者关系\)](#5-谈谈你对-dubbo-å’Œ-spring-cloud-的认识两者关系) +- [6. 性能测试了解å—?说说你知é“的性能测试工具?](#6-性能测试了解å—说说你知é“的性能测试工具) +- [7. 对于一个å•体应用系统,éšç€äº§å“使用的用户越æ¥è¶Šå¤šï¼Œç½‘站的æµé‡ä¼šå¢žåŠ ï¼Œæœ€ç»ˆå•å°æœåŠ¡å™¨æ— æ³•å¤„ç†é‚£ä¹ˆå¤§çš„æµé‡æ€Žä¹ˆåŠž?](#7-对于一个å•体应用系统,éšç€äº§å“使用的用户越æ¥è¶Šå¤šï¼Œç½‘站的æµé‡ä¼šå¢žåŠ ï¼Œæœ€ç»ˆå•å°æœåŠ¡å™¨æ— æ³•å¤„ç†é‚£ä¹ˆå¤§çš„æµé‡æ€Žä¹ˆåŠž) +- [8. å¤§è¡¨ä¼˜åŒ–çš„å¸¸è§æ‰‹æ®µ](#8-å¤§è¡¨ä¼˜åŒ–çš„å¸¸è§æ‰‹æ®µ) +- [9. 在系统中使用消æ¯é˜Ÿåˆ—能带æ¥ä»€ä¹ˆå¥½å¤„?](#9-在系统中使用消æ¯é˜Ÿåˆ—能带æ¥ä»€ä¹ˆå¥½å¤„) + - [1) é€šè¿‡å¼‚æ­¥å¤„ç†æé«˜ç³»ç»Ÿæ€§èƒ½](#1-é€šè¿‡å¼‚æ­¥å¤„ç†æé«˜ç³»ç»Ÿæ€§èƒ½) +- [2) é™ä½Žç³»ç»Ÿè€¦åˆæ€§](#2-é™ä½Žç³»ç»Ÿè€¦åˆæ€§) +- [10. 说说自己 CAP 定ç†,BASE ç†è®ºçš„了解](#10-说说自己-cap-定ç†base-ç†è®ºçš„了解) + - [CAP 定ç†](#cap-定ç†) + - [BASE ç†è®º](#base-ç†è®º) +- [å‚考](#å‚考) + + + + +### 1. ä½ ä½¿ç”¨è¿‡å“ªäº›ç»„ä»¶æˆ–è€…æ–¹æ³•æ¥æå‡ç½‘站性能,å¯ç”¨æ€§ä»¥åŠå¹¶å‘é‡ã€‚ + +1. **æé«˜ç¡¬ä»¶èƒ½åŠ›ã€å¢žåŠ ç³»ç»ŸæœåС噍**。(当æœåŠ¡å™¨å¢žåŠ åˆ°æŸä¸ªç¨‹åº¦çš„æ—¶å€™ç³»ç»Ÿæ‰€èƒ½æä¾›çš„å¹¶å‘访问é‡å‡ ä¹Žä¸å˜ï¼Œæ‰€ä»¥ä¸èƒ½æ ¹æœ¬è§£å†³é—®é¢˜ï¼‰ +2. **使用缓存**(本地缓存:本地å¯ä»¥ä½¿ç”¨JDK自带的 Mapã€Guava Cache.分布å¼ç¼“存:Redisã€Memcache.本地缓存ä¸é€‚用于æé«˜ç³»ç»Ÿå¹¶å‘é‡ï¼Œä¸€èˆ¬æ˜¯ç”¨å¤„用在程åºä¸­ã€‚比如Spring是如何实现å•例的呢?大家如果看过æºç çš„è¯ï¼Œåº”该知é“,Spiring把已ç»åˆå§‹è¿‡çš„å˜é‡æ”¾åœ¨ä¸€ä¸ªMap中,下次å†è¦ä½¿ç”¨è¿™ä¸ªå˜é‡çš„æ—¶å€™ï¼Œå…ˆåˆ¤æ–­Map中有没有,这也就是系统中常è§çš„å•例模å¼çš„实现。) +3. **消æ¯é˜Ÿåˆ—** (解耦+削峰+异步) +4. **采用分布å¼å¼€å‘** (ä¸åŒçš„æœåŠ¡éƒ¨ç½²åœ¨ä¸åŒçš„æœºå™¨èŠ‚ç‚¹ä¸Šï¼Œå¹¶ä¸”ä¸€ä¸ªæœåŠ¡ä¹Ÿå¯ä»¥éƒ¨ç½²åœ¨å¤šå°æœºå™¨ä¸Šï¼Œç„¶åŽåˆ©ç”¨ Nginx è´Ÿè½½å‡è¡¡è®¿é—®ã€‚这样就解决了å•点部署(All In)的缺点,大大æé«˜çš„系统并å‘é‡ï¼‰ +5. **æ•°æ®åº“分库(读写分离)ã€åˆ†è¡¨ï¼ˆæ°´å¹³åˆ†è¡¨ã€åž‚直分表)** +6. **采用集群** ï¼ˆå¤šå°æœºå™¨æä¾›ç›¸åŒçš„æœåŠ¡ï¼‰ +7. **CDN 加速** (å°†ä¸€äº›é™æ€èµ„æºæ¯”如图片ã€è§†é¢‘等等缓存到离用户最近的网络节点) +8. **æµè§ˆå™¨ç¼“å­˜** +9. **使用åˆé€‚的连接池**(数æ®åº“连接池ã€çº¿ç¨‹æ± ç­‰ç­‰ï¼‰ +10. **适当使用多线程进行开å‘。** + + +### 2. 设计高å¯ç”¨ç³»ç»Ÿçš„常用手段 + +1. **é™çº§ï¼š** æœåŠ¡é™çº§æ˜¯å½“æœåŠ¡å™¨åŽ‹åŠ›å‰§å¢žçš„æƒ…å†µä¸‹ï¼Œæ ¹æ®å½“å‰ä¸šåŠ¡æƒ…å†µåŠæµé‡å¯¹ä¸€äº›æœåŠ¡å’Œé¡µé¢æœ‰ç­–略的é™çº§ï¼Œä»¥æ­¤é‡Šæ”¾æœåŠ¡å™¨èµ„æºä»¥ä¿è¯æ ¸å¿ƒä»»åŠ¡çš„æ­£å¸¸è¿è¡Œã€‚é™çº§å¾€å¾€ä¼šæŒ‡å®šä¸åŒçš„级别,é¢ä¸´ä¸åŒçš„异常等级执行ä¸åŒçš„处ç†ã€‚æ ¹æ®æœåŠ¡æ–¹å¼ï¼šå¯ä»¥æ‹’接æœåŠ¡ï¼Œå¯ä»¥å»¶è¿ŸæœåŠ¡ï¼Œä¹Ÿæœ‰æ—¶å€™å¯ä»¥éšæœºæœåŠ¡ã€‚æ ¹æ®æœåŠ¡èŒƒå›´ï¼šå¯ä»¥ç æŽ‰æŸä¸ªåŠŸèƒ½ï¼Œä¹Ÿå¯ä»¥ç æŽ‰æŸäº›æ¨¡å—。总之æœåŠ¡é™çº§éœ€è¦æ ¹æ®ä¸åŒçš„业务需求采用ä¸åŒçš„é™çº§ç­–略。主è¦çš„目的就是æœåŠ¡è™½ç„¶æœ‰æŸä½†æ˜¯æ€»æ¯”没有好; +2. **陿µï¼š** é˜²æ­¢æ¶æ„请求æµé‡ã€æ¶æ„攻击,或者防止æµé‡è¶…出系统峰值; +3. **缓存:** é¿å…大é‡è¯·æ±‚直接è½åˆ°æ•°æ®åº“,将数æ®åº“击垮; +4. **è¶…æ—¶å’Œé‡è¯•机制:** é¿å…请求堆积造æˆé›ªå´©ï¼› +5. **回滚机制:** 快速修å¤é”™è¯¯ç‰ˆæœ¬ã€‚ + + +### 3. 现代互è”网应用系统通常具有哪些特点? + +1. 高并å‘,大æµé‡ï¼› +2. 高å¯ç”¨ï¼šç³»ç»Ÿ7×24å°æ—¶ä¸é—´æ–­æœåŠ¡ï¼› +3. æµ·é‡æ•°æ®ï¼šéœ€è¦å­˜å‚¨ã€ç®¡ç†æµ·é‡æ•°æ®ï¼Œéœ€è¦ä½¿ç”¨å¤§é‡æœåŠ¡å™¨ï¼› +4. ç”¨æˆ·åˆ†å¸ƒå¹¿æ³›ï¼Œç½‘ç»œæƒ…å†µå¤æ‚:许多大型互è”网都是为全çƒç”¨æˆ·æä¾›æœåŠ¡çš„ï¼Œç”¨æˆ·åˆ†å¸ƒèŒƒå›´å¹¿ï¼Œå„地网络情况åƒå·®ä¸‡åˆ«ï¼› +5. 安全环境æ¶åŠ£ï¼šç”±äºŽäº’è”网的开放性,使得互è”网更容易å—到攻击,大型网站几乎æ¯å¤©éƒ½ä¼šè¢«é»‘客攻击; +6. éœ€æ±‚å¿«é€Ÿå˜æ›´ï¼Œå‘布频ç¹ï¼šå’Œä¼ ç»Ÿè½¯ä»¶çš„版本å‘布频率ä¸åŒï¼Œäº’è”网产å“为快速适应市场,满足用户需求,其产å“å‘布频率是æžé«˜çš„ï¼› +7. æ¸è¿›å¼å‘å±•ï¼šä¸Žä¼ ç»Ÿè½¯ä»¶äº§å“æˆ–ä¼ä¸šåº”用系统一开始就规划好全部的功能和éžåŠŸèƒ½éœ€æ±‚ä¸åŒï¼Œå‡ ä¹Žæ‰€æœ‰çš„大型互è”网网站都是从一个å°ç½‘站开始,æ¸è¿›åœ°å‘展起æ¥ã€‚ + +### 4. 谈谈你对微æœåŠ¡é¢†åŸŸçš„äº†è§£å’Œè®¤è¯† + +现在大公å¸éƒ½åœ¨ç”¨å¹¶ä¸”未æ¥çš„趋势都是 Spring Cloud,而阿里开æºçš„ Spring Cloud Alibaba 也是 Spring Cloud 规范的实现 。 + +我们通常把 Spring Cloud ç†è§£ä¸ºä¸€ç³»åˆ—å¼€æºç»„件的集åˆï¼Œä½†æ˜¯ Spring Cloud并䏿˜¯ç­‰åŒäºŽ Spring Cloud Netflix çš„ Ribbonã€Feignã€Eurekaï¼ˆåœæ­¢æ›´æ–°ï¼‰ã€Hystrix è¿™ä¸€å¥—ç»„ä»¶ï¼Œè€Œæ˜¯æŠ½è±¡äº†ä¸€å¥—é€šç”¨çš„å¼€å‘æ¨¡å¼ã€‚它的目的是通过抽象出这套通用的模å¼ï¼Œè®©å¼€å‘者更快更好地开å‘ä¸šåŠ¡ã€‚ä½†æ˜¯è¿™å¥—å¼€å‘æ¨¡å¼è¿è¡Œæ—¶çš„实际载体,还是ä¾èµ–于 RPCã€ç½‘å…³ã€æœåŠ¡å‘现ã€é…置管ç†ã€é™æµç†”æ–­ã€åˆ†å¸ƒå¼é“¾è·¯è·Ÿè¸ªç­‰ç»„件的具体实现。 + +Spring Cloud Alibaba 是官方认è¯çš„æ–°ä¸€å¥— Spring Cloud 规范的实现,Spring Cloud Alibaba 是一套国产开æºäº§å“集åˆï¼ŒåŽç»­è¿˜ä¼šæœ‰ä¸­æ–‡ reference 和一些原ç†åˆ†æžæ–‡ç« ï¼Œæ‰€ä»¥ï¼Œè¿™å¯¹äºŽå›½å†…的开å‘者是éžå¸¸æ£’的一件事。阿里的这一举动势必会推动国内微æœåŠ¡æŠ€æœ¯çš„å‘展,因为在没有 Spring Cloud Alibaba 之å‰ï¼Œæˆ‘们的第一选择是 Spring Cloud Netflixï¼Œä½†æ˜¯å®ƒä»¬çš„æ–‡æ¡£éƒ½æ˜¯è‹±æ–‡çš„ï¼Œå‡ºé—®é¢˜åŽæŽ’æŸ¥ä¹Ÿæ¯”è¾ƒå›°éš¾ï¼Œ åœ¨å›½å†…å¹¶ä¸æ˜¯æœ‰ç‰¹åˆ«å¤šçš„人精通。Spring Cloud Alibaba 由阿里开æºç»„件和阿里云产å“组件两部分组æˆï¼Œå…¶è‡´åŠ›äºŽæä¾›å¾®æœåŠ¡ä¸€ç«™å¼è§£å†³æ–¹æ¡ˆï¼Œæ–¹ä¾¿å¼€å‘者通过 Spring Cloud 编程模型轻æ¾å¼€å‘å¾®æœåŠ¡åº”ç”¨ã€‚ + +å¦å¤–,Apache Dubbo Ecosystem 是围绕 Apache Dubbo 打造的微æœåŠ¡ç”Ÿæ€ï¼Œæ˜¯ç»è¿‡ç”Ÿäº§éªŒè¯çš„å¾®æœåŠ¡çš„æœ€ä½³å®žè·µç»„åˆã€‚在阿里巴巴的微æœåŠ¡è§£å†³æ–¹æ¡ˆä¸­ï¼ŒDubboã€Nacos å’Œ Sentinel,以åŠåŽç»­å°†å¼€æºçš„å¾®æœåŠ¡ç»„ä»¶ï¼Œéƒ½æ˜¯ Dubbo EcoSystem 的一部分。阿里åŽç»­ä¹Ÿä¼šå°† Dubbo EcoSystem 集æˆåˆ° Spring Cloud 的生æ€ä¸­ã€‚ + +### 5. 谈谈你对 Dubbo å’Œ Spring Cloud 的认识(两者关系) + +具体å¯ä»¥çœ‹å…¬ä¼—å·-阿里巴巴中间件的这篇文章:[独家解读:Dubbo Ecosystem - 从微æœåŠ¡æ¡†æž¶åˆ°å¾®æœåŠ¡ç”Ÿæ€](https://mp.weixin.qq.com/s/iNVctXw7tUGHhnF0hV84ww) + +Dubbo 与 Spring Cloud 并䏿˜¯ç«žäº‰å…³ç³»ï¼ŒDubbo 作为æˆç†Ÿçš„ RPC æ¡†æž¶ï¼Œå…¶æ˜“ç”¨æ€§ã€æ‰©å±•性和å¥å£®æ€§å·²å¾—到业界的认å¯ã€‚æœªæ¥ Dubbo 将会作为 Spring Cloud Alibaba çš„ RPC 组件,并与 Spring Cloud 原生的 Feign ä»¥åŠ RestTemplate è¿›è¡Œæ— ç¼æ•´åˆï¼Œå®žçŽ°â€œé›¶â€æˆæœ¬è¿ç§»ã€‚ + +在阿里巴巴的微æœåŠ¡è§£å†³æ–¹æ¡ˆä¸­ï¼ŒDubboã€Nacos å’Œ Sentinel,以åŠåŽç»­å°†å¼€æºçš„å¾®æœåŠ¡ç»„ä»¶ï¼Œéƒ½æ˜¯ Dubbo EcoSystem 的一部分。我们åŽç»­ä¹Ÿä¼šå°† Dubbo EcoSystem 集æˆåˆ° Spring Cloud 的生æ€ä¸­ã€‚ + +### 6. 性能测试了解å—?说说你知é“的性能测试工具? + +æ€§èƒ½æµ‹è¯•æŒ‡é€šè¿‡è‡ªåŠ¨åŒ–çš„æµ‹è¯•å·¥å…·æ¨¡æ‹Ÿå¤šç§æ­£å¸¸ã€å³°å€¼ä»¥åŠå¼‚常负载æ¡ä»¶æ¥å¯¹ç³»ç»Ÿçš„å„项性能指标进行测试。性能测试是总称,通常细分为: + +1. **基准测试:** 在给系统施加较低压力时,查看系统的è¿è¡ŒçŠ¶å†µå¹¶è®°å½•ç›¸å…³æ•°åšä¸ºåŸºç¡€å‚考 +2. **负载测试:**æ˜¯æŒ‡å¯¹ç³»ç»Ÿä¸æ–­åœ°å¢žåŠ åŽ‹åŠ›æˆ–å¢žåŠ ä¸€å®šåŽ‹åŠ›ä¸‹çš„æŒç»­æ—¶é—´ï¼Œç›´åˆ°ç³»ç»Ÿçš„æŸé¡¹æˆ–å¤šé¡¹æ€§èƒ½æŒ‡æ ‡è¾¾åˆ°å®‰å…¨ä¸´ç•Œå€¼ï¼Œä¾‹å¦‚æŸç§èµ„æºå·²ç»è¾¾åˆ°é¥±å’Œçжæ€ç­‰ 。此时继续加压,系统处ç†èƒ½åŠ›ä¼šä¸‹é™ã€‚ +3. **压力测试:** è¶…è¿‡å®‰å…¨è´Ÿè½½æƒ…å†µä¸‹ï¼Œä¸æ–­æ–½åŠ åŽ‹åŠ›ï¼ˆå¢žåŠ å¹¶å‘请求),直到系统崩溃或无法处ç†ä»»ä½•è¯·æ±‚ï¼Œä¾æ­¤èŽ·å¾—ç³»ç»Ÿæœ€å¤§åŽ‹åŠ›æ‰¿å—能力。 +4. **稳定性测试:** 被测试系统在特定硬件ã€è½¯ä»¶ã€ç½‘络环境下,加载一定业务压力(模拟生产环境ä¸åŒæ—¶é—´ç‚¹ã€ä¸å‡åŒ€è¯·æ±‚,呈波浪特性)è¿è¡Œä¸€æ®µè¾ƒé•¿æ—¶é—´ï¼Œä»¥æ­¤æ£€æµ‹ç³»ç»Ÿæ˜¯å¦ç¨³å®šã€‚ + +åŽç«¯ç¨‹åºå‘˜æˆ–者测试平常比较常用的测试工具是 JMeter(官网:[https://jmeter.apache.org/](https://jmeter.apache.org/))。Apache JMeter 是一款基于Java的压力测试工具(100%纯Java应用程åº)ï¼Œæ—¨åœ¨åŠ è½½æµ‹è¯•åŠŸèƒ½è¡Œä¸ºå’Œæµ‹é‡æ€§èƒ½ã€‚它最åˆè¢«è®¾è®¡ç”¨äºŽ Web åº”ç”¨æµ‹è¯•ä½†åŽæ¥æ‰©å±•到其他测试领域。 + +### 7. 对于一个å•体应用系统,éšç€äº§å“使用的用户越æ¥è¶Šå¤šï¼Œç½‘站的æµé‡ä¼šå¢žåŠ ï¼Œæœ€ç»ˆå•å°æœåŠ¡å™¨æ— æ³•å¤„ç†é‚£ä¹ˆå¤§çš„æµé‡æ€Žä¹ˆåŠž? + +这个时候就è¦è€ƒè™‘扩容了。《亿级æµé‡ç½‘站架构核心技术》这本书上é¢ä»‹ç»åˆ°æˆ‘们å¯ä»¥è€ƒè™‘下é¢å‡ æ­¥æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼š + +- 第一步,å¯ä»¥è€ƒè™‘简å•的扩容æ¥è§£å†³é—®é¢˜ã€‚比如增加系统的æœåŠ¡å™¨ï¼Œæé«˜ç¡¬ä»¶èƒ½åŠ›ç­‰ç­‰ã€‚ +- ç¬¬äºŒæ­¥ï¼Œå¦‚æžœç®€å•æ‰©å®¹æžä¸å®šï¼Œå°±éœ€è¦æ°´å¹³æ‹†åˆ†å’Œåž‚直拆分数æ®ï¼åº”ç”¨æ¥æå‡ç³»ç»Ÿçš„伸缩性,å³é€šè¿‡æ‰©å®¹æå‡ç³»ç»Ÿè´Ÿè½½èƒ½åŠ›ã€‚ +- 第三步,如果通过水平拆分ï¼åž‚直拆分还是æžä¸å®šï¼Œé‚£å°±éœ€è¦æ ¹æ®çŽ°æœ‰ç³»ç»Ÿç‰¹æ€§ï¼Œæž¶æž„å±‚é¢è¿›è¡Œé‡æž„ç”šè‡³æ˜¯é‡æ–°è®¾è®¡ï¼Œå³æŽ¨å€’釿¥ã€‚ + +å¯¹äºŽç³»ç»Ÿè®¾è®¡ï¼Œç†æƒ³çš„æƒ…况下应支æŒçº¿æ€§æ‰©å®¹å’Œå¼¹æ€§æ‰©å®¹ï¼Œå³åœ¨ç³»ç»Ÿç“¶é¢ˆæ—¶ï¼Œåªéœ€è¦å¢žåŠ æœºå™¨å°±å¯ä»¥è§£å†³ç³»ç»Ÿç“¶é¢ˆï¼Œå¦‚é™ä½Žå»¶è¿Ÿæå‡åžåé‡ï¼Œä»Žè€Œå®žçŽ°æ‰©å®¹éœ€æ±‚ã€‚ + +å¦‚æžœä½ æƒ³æ‰©å®¹ï¼Œåˆ™æ”¯æŒæ°´å¹³/åž‚ç›´ä¼¸ç¼©æ˜¯å‰æã€‚åœ¨è¿›è¡Œæ‹†åˆ†æ—¶ï¼Œä¸€å®šè¦æ¸…楚知é“自己的目的是什么,拆分åŽå¸¦æ¥çš„问题如何解决,拆分åŽå¦‚果没有得到任何收益就ä¸è¦ä¸ºäº† +拆而拆,å³ä¸è¦è¿‡åº¦æ‹†åˆ†ï¼Œè¦é€‚åˆè‡ªå·±çš„业务。 + +### 8. å¤§è¡¨ä¼˜åŒ–çš„å¸¸è§æ‰‹æ®µ + + 当MySQLå•表记录数过大时,数æ®åº“çš„CRUD性能会明显下é™ï¼Œä¸€äº›å¸¸è§çš„优化措施如下: + +1. **é™å®šæ•°æ®çš„范围:** åŠ¡å¿…ç¦æ­¢ä¸å¸¦ä»»ä½•é™åˆ¶æ•°æ®èŒƒå›´æ¡ä»¶çš„æŸ¥è¯¢è¯­å¥ã€‚比如:我们当用户在查询订å•历å²çš„æ—¶å€™ï¼Œæˆ‘们å¯ä»¥æŽ§åˆ¶åœ¨ä¸€ä¸ªæœˆçš„范围内。; +2. **读/写分离:** ç»å…¸çš„æ•°æ®åº“拆分方案,主库负责写,从库负责读; +3. **垂直分区:** **æ ¹æ®æ•°æ®åº“é‡Œé¢æ•°æ®è¡¨çš„相关性进行拆分。** 例如,用户表中既有用户的登录信æ¯åˆæœ‰ç”¨æˆ·çš„基本信æ¯ï¼Œå¯ä»¥å°†ç”¨æˆ·è¡¨æ‹†åˆ†æˆä¸¤ä¸ªå•独的表,甚至放到å•独的库åšåˆ†åº“。**ç®€å•æ¥è¯´åž‚直拆分是指数æ®è¡¨åˆ—的拆分,把一张列比较多的表拆分为多张表。** 如下图所示,这样æ¥è¯´å¤§å®¶åº”该就更容易ç†è§£äº†ã€‚![](https://user-gold-cdn.xitu.io/2018/6/16/164084354ba2e0fd?w=950&h=279&f=jpeg&s=26015)**垂直拆分的优点:** å¯ä»¥ä½¿å¾—行数æ®å˜å°ï¼Œåœ¨æŸ¥è¯¢æ—¶å‡å°‘读å–çš„Block数,å‡å°‘I/O次数。此外,垂直分区å¯ä»¥ç®€åŒ–表的结构,易于维护。**垂直拆分的缺点:** 主键会出现冗余,需è¦ç®¡ç†å†—余列,并会引起Joinæ“作,å¯ä»¥é€šè¿‡åœ¨åº”用层进行Joinæ¥è§£å†³ã€‚此外,垂直分区会让事务å˜å¾—æ›´åŠ å¤æ‚ï¼› +4. **水平分区:** **ä¿æŒæ•°æ®è¡¨ç»“æž„ä¸å˜ï¼Œé€šè¿‡æŸç§ç­–略存储数æ®åˆ†ç‰‡ã€‚这样æ¯ä¸€ç‰‡æ•°æ®åˆ†æ•£åˆ°ä¸åŒçš„表或者库中,达到了分布å¼çš„目的。 水平拆分å¯ä»¥æ”¯æ’‘éžå¸¸å¤§çš„æ•°æ®é‡ã€‚** 水平拆分是指数æ®è¡¨è¡Œçš„æ‹†åˆ†ï¼Œè¡¨çš„行数超过200ä¸‡è¡Œæ—¶ï¼Œå°±ä¼šå˜æ…¢ï¼Œè¿™æ—¶å¯ä»¥æŠŠä¸€å¼ çš„è¡¨çš„æ•°æ®æ‹†æˆå¤šå¼ è¡¨æ¥å­˜æ”¾ã€‚举个例å­ï¼šæˆ‘们å¯ä»¥å°†ç”¨æˆ·ä¿¡æ¯è¡¨æ‹†åˆ†æˆå¤šä¸ªç”¨æˆ·ä¿¡æ¯è¡¨ï¼Œè¿™æ ·å°±å¯ä»¥é¿å…å•一表数æ®é‡è¿‡å¤§å¯¹æ€§èƒ½é€ æˆå½±å“。![æ•°æ®åº“水平拆分](https://user-gold-cdn.xitu.io/2018/6/16/164084b7e9e423e3?w=690&h=271&f=jpeg&s=23119)水平拆分å¯ä»¥æ”¯æŒéžå¸¸å¤§çš„æ•°æ®é‡ã€‚éœ€è¦æ³¨æ„的一点是:分表仅仅是解决了å•一表数æ®è¿‡å¤§çš„问题,但由于表的数æ®è¿˜æ˜¯åœ¨åŒä¸€å°æœºå™¨ä¸Šï¼Œå…¶å®žå¯¹äºŽæå‡MySQLå¹¶å‘能力没有什么æ„义,所以 **水平拆分最好分库** 。水平拆分能够 **支æŒéžå¸¸å¤§çš„æ•°æ®é‡å­˜å‚¨ï¼Œåº”用端改造也少**,但 **分片事务难以解决** ,跨界点Joinæ€§èƒ½è¾ƒå·®ï¼Œé€»è¾‘å¤æ‚。《Java工程师修炼之é“》的作者推è **å°½é‡ä¸è¦å¯¹æ•°æ®è¿›è¡Œåˆ†ç‰‡ï¼Œå› ä¸ºæ‹†åˆ†ä¼šå¸¦æ¥é€»è¾‘ã€éƒ¨ç½²ã€è¿ç»´çš„å„ç§å¤æ‚度** ,一般的数æ®è¡¨åœ¨ä¼˜åŒ–得当的情况下支撑åƒä¸‡ä»¥ä¸‹çš„æ•°æ®é‡æ˜¯æ²¡æœ‰å¤ªå¤§é—®é¢˜çš„。如果实在è¦åˆ†ç‰‡ï¼Œå°½é‡é€‰æ‹©å®¢æˆ·ç«¯åˆ†ç‰‡æž¶æž„,这样å¯ä»¥å‡å°‘一次和中间件的网络I/O。 + +**下é¢è¡¥å……一下数æ®åº“分片的两ç§å¸¸è§æ–¹æ¡ˆï¼š** + +- **客户端代ç†ï¼š** **分片逻辑在应用端,å°è£…在jar包中,通过修改或者å°è£…JDBC层æ¥å®žçŽ°ã€‚** 当当网的 **Sharding-JDBC** ã€é˜¿é‡Œçš„TDDLæ˜¯ä¸¤ç§æ¯”较常用的实现。 +- **中间件代ç†ï¼š** **在应用和数æ®ä¸­é—´åŠ äº†ä¸€ä¸ªä»£ç†å±‚。分片逻辑统一维护在中间件æœåŠ¡ä¸­ã€‚** 我们现在谈的 **Mycat** ã€360çš„Atlasã€ç½‘易的DDBç­‰ç­‰éƒ½æ˜¯è¿™ç§æž¶æž„的实现。 + +### 9. 在系统中使用消æ¯é˜Ÿåˆ—能带æ¥ä»€ä¹ˆå¥½å¤„? + +**ã€Šå¤§åž‹ç½‘ç«™æŠ€æœ¯æž¶æž„ã€‹ç¬¬å››ç« å’Œç¬¬ä¸ƒç« å‡æœ‰æåˆ°æ¶ˆæ¯é˜Ÿåˆ—å¯¹åº”ç”¨æ€§èƒ½åŠæ‰©å±•性的æå‡ã€‚** + +#### 1) é€šè¿‡å¼‚æ­¥å¤„ç†æé«˜ç³»ç»Ÿæ€§èƒ½ +![é€šè¿‡å¼‚æ­¥å¤„ç†æé«˜ç³»ç»Ÿæ€§èƒ½](https://user-gold-cdn.xitu.io/2018/4/21/162e63a8e34ba534?w=910&h=350&f=jpeg&s=29123) +如上图,**在ä¸ä½¿ç”¨æ¶ˆæ¯é˜Ÿåˆ—æœåŠ¡å™¨çš„æ—¶å€™ï¼Œç”¨æˆ·çš„è¯·æ±‚æ•°æ®ç›´æŽ¥å†™å…¥æ•°æ®åº“,在高并å‘的情况下数æ®åº“压力剧增,使得å“åº”é€Ÿåº¦å˜æ…¢ã€‚但是在使用消æ¯é˜Ÿåˆ—之åŽï¼Œç”¨æˆ·çš„请求数æ®å‘é€ç»™æ¶ˆæ¯é˜Ÿåˆ—之åŽç«‹å³ 返回,å†ç”±æ¶ˆæ¯é˜Ÿåˆ—的消费者进程从消æ¯é˜Ÿåˆ—ä¸­èŽ·å–æ•°æ®ï¼Œå¼‚步写入数æ®åº“。由于消æ¯é˜Ÿåˆ—æœåС噍处ç†é€Ÿåº¦å¿«äºŽæ•°æ®åº“(消æ¯é˜Ÿåˆ—也比数æ®åº“有更好的伸缩性),因此å“应速度得到大幅改善。** + +é€šè¿‡ä»¥ä¸Šåˆ†æžæˆ‘们å¯ä»¥å¾—出**消æ¯é˜Ÿåˆ—具有很好的削峰作用的功能**——å³**通过异步处ç†ï¼Œå°†çŸ­æ—¶é—´é«˜å¹¶å‘产生的事务消æ¯å­˜å‚¨åœ¨æ¶ˆæ¯é˜Ÿåˆ—中,从而削平高峰期的并å‘事务。** 举例:在电å­å•†åŠ¡ä¸€äº›ç§’æ€ã€ä¿ƒé”€æ´»åŠ¨ä¸­ï¼Œåˆç†ä½¿ç”¨æ¶ˆæ¯é˜Ÿåˆ—å¯ä»¥æœ‰æ•ˆæŠµå¾¡ä¿ƒé”€æ´»åŠ¨åˆšå¼€å§‹å¤§é‡è®¢å•涌入对系统的冲击。如下图所示: +![åˆç†ä½¿ç”¨æ¶ˆæ¯é˜Ÿåˆ—å¯ä»¥æœ‰æ•ˆæŠµå¾¡ä¿ƒé”€æ´»åŠ¨åˆšå¼€å§‹å¤§é‡è®¢å•涌入对系统的冲击](https://user-gold-cdn.xitu.io/2018/4/21/162e64583dd3ed01?w=780&h=384&f=jpeg&s=13550) +因为**用户请求数æ®å†™å…¥æ¶ˆæ¯é˜Ÿåˆ—之åŽå°±ç«‹å³è¿”回给用户了,但是请求数æ®åœ¨åŽç»­çš„业务校验ã€å†™æ•°æ®åº“ç­‰æ“作中å¯èƒ½å¤±è´¥**。因此使用消æ¯é˜Ÿåˆ—进行异步处ç†ä¹‹åŽï¼Œéœ€è¦**适当修改业务æµç¨‹è¿›è¡Œé…åˆ**,比如**用户在æäº¤è®¢å•之åŽï¼Œè®¢å•æ•°æ®å†™å…¥æ¶ˆæ¯é˜Ÿåˆ—,ä¸èƒ½ç«‹å³è¿”å›žç”¨æˆ·è®¢å•æäº¤æˆåŠŸï¼Œéœ€è¦åœ¨æ¶ˆæ¯é˜Ÿåˆ—çš„è®¢å•æ¶ˆè´¹è€…进程真正处ç†å®Œè¯¥è®¢å•之åŽï¼Œç”šè‡³å‡ºåº“åŽï¼Œå†é€šè¿‡ç”µå­é‚®ä»¶æˆ–çŸ­ä¿¡é€šçŸ¥ç”¨æˆ·è®¢å•æˆåŠŸ**,以å…交易纠纷。这就类似我们平时手机订ç«è½¦ç¥¨å’Œç”µå½±ç¥¨ã€‚ + +### 2) é™ä½Žç³»ç»Ÿè€¦åˆæ€§ +æˆ‘ä»¬çŸ¥é“æ¨¡å—分布å¼éƒ¨ç½²ä»¥åŽèšåˆæ–¹å¼é€šå¸¸æœ‰ä¸¤ç§ï¼š1.**åˆ†å¸ƒå¼æ¶ˆæ¯é˜Ÿåˆ—**å’Œ2.**åˆ†å¸ƒå¼æœåŠ¡**。 + +> **å…ˆæ¥ç®€å•è¯´ä¸€ä¸‹åˆ†å¸ƒå¼æœåŠ¡ï¼š** + +ç›®å‰ä½¿ç”¨æ¯”è¾ƒå¤šçš„ç”¨æ¥æž„建**SOA(Service Oriented Architectureé¢å‘æœåŠ¡ä½“ç³»ç»“æž„ï¼‰**çš„**åˆ†å¸ƒå¼æœåŠ¡æ¡†æž¶**是阿里巴巴开æºçš„**Dubbo**.如果想深入了解Dubboçš„å¯ä»¥çœ‹æˆ‘写的关于Dubbo的这一篇文章:**《高性能优秀的æœåŠ¡æ¡†æž¶-dubbo介ç»ã€‹**:[https://juejin.im/post/5acadeb1f265da2375072f9c](https://juejin.im/post/5acadeb1f265da2375072f9c) + +> **冿¥è°ˆæˆ‘ä»¬çš„åˆ†å¸ƒå¼æ¶ˆæ¯é˜Ÿåˆ—:** + +我们知é“如果模å—之间ä¸å­˜åœ¨ç›´æŽ¥è°ƒç”¨ï¼Œé‚£ä¹ˆæ–°å¢žæ¨¡å—或者修改模å—就对其他模å—å½±å“较å°ï¼Œè¿™æ ·ç³»ç»Ÿçš„坿‰©å±•性无疑更好一些。 + +我们最常è§çš„**事件驱动架构**类似生产者消费者模å¼ï¼Œåœ¨å¤§åž‹ç½‘站中通常用利用消æ¯é˜Ÿåˆ—实现事件驱动结构。如下图所示: +![利用消æ¯é˜Ÿåˆ—实现事件驱动结构](https://user-gold-cdn.xitu.io/2018/4/21/162e6665fa394b3b?w=790&h=290&f=jpeg&s=14946) +**消æ¯é˜Ÿåˆ—使利用å‘布-订阅模å¼å·¥ä½œï¼Œæ¶ˆæ¯å‘é€è€…(生产者)å‘布消æ¯ï¼Œä¸€ä¸ªæˆ–å¤šä¸ªæ¶ˆæ¯æŽ¥å—者(消费者)订阅消æ¯ã€‚** 从上图å¯ä»¥çœ‹åˆ°**消æ¯å‘é€è€…ï¼ˆç”Ÿäº§è€…ï¼‰å’Œæ¶ˆæ¯æŽ¥å—者(消费者)之间没有直接耦åˆ**,消æ¯å‘é€è€…将消æ¯å‘é€è‡³åˆ†å¸ƒå¼æ¶ˆæ¯é˜Ÿåˆ—å³ç»“æŸå¯¹æ¶ˆæ¯çš„处ç†ï¼Œæ¶ˆæ¯æŽ¥å—è€…ä»Žåˆ†å¸ƒå¼æ¶ˆæ¯é˜Ÿåˆ—获å–该消æ¯åŽè¿›è¡ŒåŽç»­å¤„ç†ï¼Œå¹¶ä¸éœ€è¦çŸ¥é“该消æ¯ä»Žä½•而æ¥ã€‚**对新增业务,åªè¦å¯¹è¯¥ç±»æ¶ˆæ¯æ„Ÿå…´è¶£ï¼Œå³å¯è®¢é˜…该消æ¯ï¼Œå¯¹åŽŸæœ‰ç³»ç»Ÿå’Œä¸šåŠ¡æ²¡æœ‰ä»»ä½•å½±å“ï¼Œä»Žè€Œå®žçŽ°ç½‘ç«™ä¸šåŠ¡çš„å¯æ‰©å±•性设计**。 + +æ¶ˆæ¯æŽ¥å—者对消æ¯è¿›è¡Œè¿‡æ»¤ã€å¤„ç†ã€åŒ…装åŽï¼Œæž„造æˆä¸€ä¸ªæ–°çš„æ¶ˆæ¯ç±»åž‹ï¼Œå°†æ¶ˆæ¯ç»§ç»­å‘é€å‡ºåŽ»ï¼Œç­‰å¾…å…¶ä»–æ¶ˆæ¯æŽ¥å—者订阅该消æ¯ã€‚因此基于事件(消æ¯å¯¹è±¡ï¼‰é©±åŠ¨çš„ä¸šåŠ¡æž¶æž„å¯ä»¥æ˜¯ä¸€ç³»åˆ—æµç¨‹ã€‚ + +**å¦å¤–为了é¿å…消æ¯é˜Ÿåˆ—æœåŠ¡å™¨å®•æœºé€ æˆæ¶ˆæ¯ä¸¢å¤±ï¼Œä¼šå°†æˆåŠŸå‘é€åˆ°æ¶ˆæ¯é˜Ÿåˆ—的消æ¯å­˜å‚¨åœ¨æ¶ˆæ¯ç”Ÿäº§è€…æœåŠ¡å™¨ä¸Šï¼Œç­‰æ¶ˆæ¯çœŸæ­£è¢«æ¶ˆè´¹è€…æœåС噍处ç†åŽæ‰åˆ é™¤æ¶ˆæ¯ã€‚在消æ¯é˜Ÿåˆ—æœåŠ¡å™¨å®•æœºåŽï¼Œç”Ÿäº§è€…æœåŠ¡å™¨ä¼šé€‰æ‹©åˆ†å¸ƒå¼æ¶ˆæ¯é˜Ÿåˆ—æœåŠ¡å™¨é›†ç¾¤ä¸­çš„å…¶ä»–æœåС噍å‘布消æ¯ã€‚** + +**备注:** ä¸è¦è®¤ä¸ºæ¶ˆæ¯é˜Ÿåˆ—åªèƒ½åˆ©ç”¨å‘布-订阅模å¼å·¥ä½œï¼Œåªä¸è¿‡åœ¨è§£è€¦è¿™ä¸ªç‰¹å®šä¸šåŠ¡çŽ¯å¢ƒä¸‹æ˜¯ä½¿ç”¨å‘布-订阅模å¼çš„,**比如在我们的ActiveMQ消æ¯é˜Ÿåˆ—中还有点对点工作模å¼**,具体的会在åŽé¢çš„æ–‡ç« ç»™å¤§å®¶è¯¦ç»†ä»‹ç»ï¼Œè¿™ä¸€ç¯‡æ–‡ç« ä¸»è¦è¿˜æ˜¯è®©å¤§å®¶å¯¹æ¶ˆæ¯é˜Ÿåˆ—有一个更é€å½»çš„了解。 + +> 这个问题一般会在上一个问题问完之åŽï¼Œç´§æŽ¥ç€è¢«é—®åˆ°ã€‚“使用消æ¯é˜Ÿåˆ—会带æ¥ä»€ä¹ˆé—®é¢˜ï¼Ÿâ€è¿™ä¸ªé—®é¢˜è¦å¼•èµ·é‡è§†ï¼Œä¸€èˆ¬æˆ‘们都会考虑使用消æ¯é˜Ÿåˆ—会带æ¥çš„好处而忽略它带æ¥çš„é—®é¢˜ï¼ + +### 10. 说说自己 CAP 定ç†,BASE ç†è®ºçš„了解 + +#### CAP å®šç† + +![CAP定ç†](https://user-gold-cdn.xitu.io/2018/5/24/163912e973ecb93c?w=624&h=471&f=png&s=32984) +在ç†è®ºè®¡ç®—机科学中,CAP定ç†ï¼ˆCAP theorem),åˆè¢«ç§°ä½œå¸ƒé²å°”定ç†ï¼ˆBrewer's theorem),它指出对于一个分布å¼è®¡ç®—系统æ¥è¯´ï¼Œä¸å¯èƒ½åŒæ—¶æ»¡è¶³ä»¥ä¸‹ä¸‰ç‚¹ï¼š + +- **一致性(Consistence)** :所有节点访问åŒä¸€ä»½æœ€æ–°çš„æ•°æ®å‰¯æœ¬ +- **å¯ç”¨æ€§ï¼ˆAvailability)**:æ¯æ¬¡è¯·æ±‚都能获å–到éžé”™çš„å“应——但是ä¸ä¿è¯èŽ·å–的数æ®ä¸ºæœ€æ–°æ•°æ® +- **分区容错性(Partition tolerance)** : 分布å¼ç³»ç»Ÿåœ¨é‡åˆ°æŸèŠ‚ç‚¹æˆ–ç½‘ç»œåˆ†åŒºæ•…éšœçš„æ—¶å€™ï¼Œä»ç„¶èƒ½å¤Ÿå¯¹å¤–æä¾›æ»¡è¶³ä¸€è‡´æ€§å’Œå¯ç”¨æ€§çš„æœåŠ¡ã€‚ + +CAP仅适用于原å­è¯»å†™çš„NOSQL场景中,并ä¸é€‚åˆæ•°æ®åº“系统。现在的分布å¼ç³»ç»Ÿå…·æœ‰æ›´å¤šç‰¹æ€§æ¯”如扩展性ã€å¯ç”¨æ€§ç­‰ç­‰ï¼Œåœ¨è¿›è¡Œç³»ç»Ÿè®¾è®¡å’Œå¼€å‘时,我们ä¸åº”该仅仅局é™åœ¨CAP问题上。 + +**注æ„ï¼šä¸æ˜¯æ‰€è°“çš„3选2(ä¸è¦è¢«ç½‘上大多数文章误导了):** + +大部分人解释这一定律时,常常简å•的表述为:“一致性ã€å¯ç”¨æ€§ã€åˆ†åŒºå®¹å¿æ€§ä¸‰è€…ä½ åªèƒ½åŒæ—¶è¾¾åˆ°å…¶ä¸­ä¸¤ä¸ªï¼Œä¸å¯èƒ½åŒæ—¶è¾¾åˆ°â€ã€‚实际上这是一个éžå¸¸å…·æœ‰è¯¯å¯¼æ€§è´¨çš„说法,而且在CAPç†è®ºè¯žç”Ÿ12年之åŽï¼ŒCAP之父也在2012å¹´é‡å†™äº†ä¹‹å‰çš„论文。 + +**当å‘生网络分区的时候,如果我们è¦ç»§ç»­æœåŠ¡ï¼Œé‚£ä¹ˆå¼ºä¸€è‡´æ€§å’Œå¯ç”¨æ€§åªèƒ½2选1。也就是说当网络分区之åŽPæ˜¯å‰æï¼Œå†³å®šäº†Pä¹‹åŽæ‰æœ‰Cå’ŒA的选择。也就是说分区容错性(Partition tolerance)我们是必须è¦å®žçŽ°çš„ã€‚** + +我在网上找了很多文章想看一下有没有文章æåˆ°è¿™ä¸ªä¸æ˜¯æ‰€è°“çš„3选2,用百度åŠå¤©æ²¡æ‰¾åˆ°äº†ä¸€ç¯‡ï¼Œç”¨è°·æ­Œæœç´¢æ‰¾åˆ°ä¸€ç¯‡æ¯”较ä¸é”™çš„,如果想深入学习一下CAP就看这篇文章把,我这里就ä¸å¤šBB了:**《分布å¼ç³»ç»Ÿä¹‹CAPç†è®ºã€‹ :** [http://www.cnblogs.com/hxsyl/p/4381980.html](http://www.cnblogs.com/hxsyl/p/4381980.html) + + +#### BASE ç†è®º + +**BASE** 是 **Basically Available(基本å¯ç”¨ï¼‰** ã€**Soft-state(软状æ€ï¼‰** å’Œ **Eventually Consistent(最终一致性)** 三个短语的缩写。BASEç†è®ºæ˜¯å¯¹CAP中一致性和å¯ç”¨æ€§æƒè¡¡çš„ç»“æžœï¼Œå…¶æ¥æºäºŽå¯¹å¤§è§„模互è”网系统分布å¼å®žè·µçš„æ€»ç»“,是基于CAP定ç†é€æ­¥æ¼”化而æ¥çš„,它大大é™ä½Žäº†æˆ‘ä»¬å¯¹ç³»ç»Ÿçš„è¦æ±‚。 + +**BASEç†è®ºçš„æ ¸å¿ƒæ€æƒ³ï¼š** å³ä½¿æ— æ³•åšåˆ°å¼ºä¸€è‡´æ€§ï¼Œä½†æ¯ä¸ªåº”用都å¯ä»¥æ ¹æ®è‡ªèº«ä¸šåŠ¡ç‰¹ç‚¹ï¼Œé‡‡ç”¨é€‚å½“çš„æ–¹å¼æ¥ä½¿ç³»ç»Ÿè¾¾åˆ°æœ€ç»ˆä¸€è‡´æ€§ã€‚也就是牺牲数æ®çš„ä¸€è‡´æ€§æ¥æ»¡è¶³ç³»ç»Ÿçš„高å¯ç”¨æ€§ï¼Œç³»ç»Ÿä¸­ä¸€éƒ¨åˆ†æ•°æ®ä¸å¯ç”¨æˆ–者ä¸ä¸€è‡´æ—¶ï¼Œä»éœ€è¦ä¿æŒç³»ç»Ÿæ•´ä½““主è¦å¯ç”¨â€ã€‚ + + +**BASEç†è®ºä¸‰è¦ç´ ï¼š** + +![BASEç†è®ºä¸‰è¦ç´ ](https://user-gold-cdn.xitu.io/2018/5/24/163914806d9e15c6?w=612&h=461&f=png&s=39129) + +1. **基本å¯ç”¨ï¼š** 基本å¯ç”¨æ˜¯æŒ‡åˆ†å¸ƒå¼ç³»ç»Ÿåœ¨å‡ºçްä¸å¯é¢„知故障的时候,å…许æŸå¤±éƒ¨åˆ†å¯ç”¨æ€§ã€‚但是,这ç»ä¸ç­‰ä»·äºŽç³»ç»Ÿä¸å¯ç”¨ã€‚ 比如: **â‘ å“应时间上的æŸå¤±**:正常情况下,一个在线æœç´¢å¼•擎需è¦åœ¨0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的å“应时间增加了1~2ç§’ï¼›**②系统功能上的æŸå¤±**:正常情况下,在一个电å­å•†åŠ¡ç½‘ç«™ä¸Šè¿›è¡Œè´­ç‰©çš„æ—¶å€™ï¼Œæ¶ˆè´¹è€…å‡ ä¹Žèƒ½å¤Ÿé¡ºåˆ©å®Œæˆæ¯ä¸€ç¬”订å•ï¼Œä½†æ˜¯åœ¨ä¸€äº›èŠ‚æ—¥å¤§ä¿ƒè´­ç‰©é«˜å³°çš„æ—¶å€™ï¼Œç”±äºŽæ¶ˆè´¹è€…çš„è´­ç‰©è¡Œä¸ºæ¿€å¢žï¼Œä¸ºäº†ä¿æŠ¤è´­ç‰©ç³»ç»Ÿçš„ç¨³å®šæ€§ï¼Œéƒ¨åˆ†æ¶ˆè´¹è€…å¯èƒ½ä¼šè¢«å¼•导到一个é™çº§é¡µé¢ï¼› +2. **软状æ€ï¼š** è½¯çŠ¶æ€æŒ‡å…许系统中的数æ®å­˜åœ¨ä¸­é—´çжæ€ï¼Œå¹¶è®¤ä¸ºè¯¥ä¸­é—´çжæ€çš„存在ä¸ä¼šå½±å“系统的整体å¯ç”¨æ€§ï¼Œå³å…许系统在ä¸åŒèŠ‚ç‚¹çš„æ•°æ®å‰¯æœ¬ä¹‹é—´è¿›è¡Œæ•°æ®åŒæ­¥çš„过程存在延时; +3. **最终一致性:** 最终一致性强调的是系统中所有的数æ®å‰¯æœ¬ï¼Œåœ¨ç»è¿‡ä¸€æ®µæ—¶é—´çš„åŒæ­¥åŽï¼Œæœ€ç»ˆèƒ½å¤Ÿè¾¾åˆ°ä¸€ä¸ªä¸€è‡´çš„状æ€ã€‚因此,最终一致性的本质是需è¦ç³»ç»Ÿä¿è¯æœ€ç»ˆæ•°æ®èƒ½å¤Ÿè¾¾åˆ°ä¸€è‡´ï¼Œè€Œä¸éœ€è¦å®žæ—¶ä¿è¯ç³»ç»Ÿæ•°æ®çš„强一致性。 + +### å‚考 + +- 《大型网站技术架构》 +- 《亿级æµé‡ç½‘站架构核心技术》 +- 《Java工程师修炼之é“》 +- https://www.cnblogs.com/puresoul/p/5456855.html \ No newline at end of file