diff --git a/README.md b/README.md index 6d1fb206..24ca51d0 100755 --- a/README.md +++ b/README.md @@ -352,7 +352,11 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle ### 负载均衡 - [负载均衡](./docs/high-performance/load-balancing.md) + [负载均衡](./docs/high-performance/load-balancing.md) + +### CDN + +[CDN(内容分发网络)](./docs/high-performance/cdn.md) ## 高可用 diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts index 85bdb6a4..47d30714 100644 --- a/docs/.vuepress/sidebar.ts +++ b/docs/.vuepress/sidebar.ts @@ -421,6 +421,7 @@ export const sidebarConfig = defineSidebarConfig({ children: [ "read-and-write-separation-and-library-subtable", "load-balancing", + "cdn", { text: "消息队列", prefix: "message-queue/", diff --git a/docs/high-performance/cdn.md b/docs/high-performance/cdn.md new file mode 100644 index 00000000..ea7897af --- /dev/null +++ b/docs/high-performance/cdn.md @@ -0,0 +1,129 @@ +--- +title: CDN(内容分发网络) +category: 高性能 +head: + - - meta + - name: keywords + content: CDN,内容分发网络 + - - meta + - name: description + content: CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。 +--- + +## 什么是 CDN ? + +**CDN** 全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是 **内容分发网络** 。 + +我们可以将内容分发网络拆开来看: + +- 内容 :指的是静态资源比如图片、视频、文档、JS、CSS、HTML。 +- 分发网络 :指的是将这些静态资源分发到位于多个不同的地理位置机房中的服务器上,这样,就可以实现静态资源的就近访问比如北京的用户直接访问北京机房的数据。 + +所以,简单来说,**CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。** + +类似于京东建立的庞大的仓储运输体系,京东物流在全国拥有非常多的仓库,仓储网络几乎覆盖全国所有区县。这样的话,用户下单的第一时间,商品就从距离用户最近的仓库,直接发往对应的配送站,再由京东小哥送到你家。 + +![京东仓配系统](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/jingdong-wuliu-cangpei.png) + +你可以将 CDN 看作是服务上一层的特殊缓存服务,分布在全国各地,主要用来处理静态资源的请求。 + +![CDN 简易示意图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/cdn-101.png) + +我们经常拿全站加速和内容分发网络做对比,不要把两者搞混了!全站加速(不同云服务商叫法不同,腾讯云叫 ECDN、阿里云叫 DCDN)既可以加速静态资源又可以加速动态资源,内容分发网络(CDN)主要针对的是 **静态资源** 。 + +![阿里云文档:https://help.aliyun.com/document_detail/64836.html](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/cdn-aliyun-dcdn.png) + +绝大部分公司都会在项目开发中交使用 CDN 服务,但很少会有自建 CDN 服务的公司。基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。 + +很多朋友可能要问了:**既然是就近访问,为什么不直接将服务部署在多个不同的地方呢?** + +- 成本太高,需要部署多份相同的服务。 +- 静态资源通常占用空间比较大且经常会被访问到,如果直接使用服务器或者缓存来处理静态资源请求的话,对系统资源消耗非常大,可能会影响到系统其他服务的正常运行。 + +同一个服务在在多个不同的地方部署多份(比如同城灾备、异地灾备、同城多活、异地多活)是为了实现系统的高可用而不是就近访问。 + +## CDN 工作原理是什么? + +搞懂下面 3 个问题也就搞懂了 CDN 的工作原理: + +1. 静态资源是如何被缓存到 CDN 节点中的? +2. 如何找到最合适的 CDN 节点? +3. 如何防止静态资源被盗用? + +### 静态资源是如何被缓存到 CDN 节点中的? + +你可以通过预热的方式将源站的资源同步到 CDN 的节点中。这样的话,用户首次请求资源可以直接从 CDN 节点中取,无需回源。这样可以降低源站压力,提升用户体验。 + +如果不预热的话,你访问的资源可能不再 CDN 节点中,这个时候 CDN 节点将请求源站获取资源,这个过程是大家经常说的 **回源**。 + +**命中率** 和 **回源率** 是衡量 CDN 服务质量两个重要指标。命中率越高越好,回源率越低越好。 + +如果资源有更新的话,你也可以对其 **刷新** ,删除 CDN 节点上缓存的资源,当用户访问对应的资源时直接回源获取最新的资源,并重新缓存。 + +### 如何找到最合适的 CDN 节点? + +GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个CDN节点之间相互协作,最常用的是基于 DNS 的 GSLB。 + +CDN 会通过 GSLB 找到最合适的 CDN 节点,更具体点来说是下面这样的: + +1. 浏览器向 DNS 服务器发送域名请求; +2. DNS 服务器向根据 CNAME( Canonical Name ) 别名记录向 GSLB 发送请求; +3. GSLB 返回性能最好(通常距离请求地址最近)的 CDN 节点(边缘服务器,真正缓存内容的地方)的地址给浏览器; +4. 浏览器直接访问指定的 CDN 节点。 + +![CDN 原理示意图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/cdn-overview.png) + + + +为了方便理解,上图其实做了一点简化。GSLB 内部可以看作是 CDN 专用 DNS 服务器和负载均衡系统组合。CDN 专用 DNS 服务器会返回负载均衡系统 IP 地址给浏览器,浏览器使用 IP 地址请求负载均衡系统进而找到对应的 CDN 节点。 + +**GSLB 是如何选择出最合适的 CDN 节点呢?** GSLB 会根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标来综合判断具体返回哪一个 CDN 节点的地址。 + +### 如何防止资源被盗刷? + +如果我们的资源被其他用户或者网站非法盗刷的话,将会是一笔不小的开支。 + +解决这个问题最常用最简单的办法设置 **Referer 防盗链**,具体来说就是根据 HTTP 请求的头信息里面的 Referer 字段对请求进行限制。我们可以通过 Referer 字段获取到当前请求页面的来源页面的网站地址,这样我们就能确定请求是否来自合法的网站。 + +CDN 服务提供商几乎都提供了这种比较基础的防盗链机制。 + +![腾讯云 CDN Referer 防盗链配置](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/cnd-tencent-cloud-anti-theft.png) + +不过,如果站点的防盗链配置允许 Referer 为空的话,通过隐藏 Referer,可以直接绕开防盗链。 + +通常情况下,我们会配合其他机制来确保静态资源被盗用,一种常用的机制是 **时间戳防盗链** 。相比之下,**时间戳防盗链** 的安全性更强一些。时间戳防盗链加密的 URL 具有时效性,过期之后就无法再被允许访问。 + +时间戳防盗链的 URL 通常会有两个参数一个是签名字符串,一个是过期时间。签名字符串一般是通过对用户设定的加密字符串、请求路径、过期时间通过 MD5 哈希算法取哈希的方式获得。 + +时间戳防盗链 URL示例: + +``` +http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312 +``` + +- `wsSecret` :签名字符串。 +- `wsTime`: 过期时间。 + +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/timestamp-anti-theft.png) + +时间戳防盗链的实现也比较简单,并且可靠性较高,推荐使用。并且,绝大部分 CDN 服务提供商都提供了开箱即用的时间戳防盗链机制。 + +![七牛云时间戳防盗链配置](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/cdn/qiniuyun-timestamp-anti-theft.png) + +除了 Referer 防盗链和时间戳防盗链之外,你还可以 IP 黑白名单配置、IP 访问限频配置等机制来防盗刷。 + +## 总结 + +- CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。 +- 基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。 +- GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个 CDN 节点之间相互协作,最常用的是基于 DNS 的 GSLB。CDN 会通过 GSLB 找到最合适的 CDN 节点。 +- 为了防止静态资源被盗用,我们可以利用 **Referer 防盗链** + **时间戳防盗链** 。 + +## 参考 + +- 时间戳防盗链 - 七牛云 CDN:https://developer.qiniu.com/fusion/kb/1670/timestamp-hotlinking-prevention +- CDN是个啥玩意?一文说个明白:https://mp.weixin.qq.com/s/Pp0C8ALUXsmYCUkM5QnkQw +- 《透视 HTTP 协议》- 37 | CDN:加速我们的网络服务:http://gk.link/a/11yOG + + + diff --git a/docs/high-performance/images/cdn/cdn-101.drawio b/docs/high-performance/images/cdn/cdn-101.drawio new file mode 100644 index 00000000..8eb42afd --- /dev/null +++ b/docs/high-performance/images/cdn/cdn-101.drawio @@ -0,0 +1 @@ +7Vtdd9pIEv01PM4eCUmO/SgQtpVDC2MgDn4TgggJbLxGGEm/fu+tFiDAnslmkzM5Z9Z5oGn1R9W9VdVVLdKw2k/5zWv4Mler6WzZaBrTvGF5jSb+Pjn4YE+he66uPumO+DWZ6i7z0DFIylnVaVS9m2Q6Wx8NzFarZZa8HHdGq+fnWZQd9YWvr6vt8bBvq+Xxri9hPDvrGETh8rz3IZlm86rXvLg6PLidJfF8t/WFY+snT+FudKXKeh5OV9tal9VpWO3X1SrTrae8PVsSvR0wet71B0/3kr3OnrPvmWCEszC/975YN+GdP/z0sjTujT+sSri3cLmpVG50nMal03DbjY7daLUbYIw9140WGtfS434O38IbUtNoXiyxe2vySg2zosLt4t8bqtX6tnrO/lgLqy4GmBcv+eEhWrF8dj41Wl7jymTDbTWurvb7pNhHTOBf0XOF4n6PZjbLOX2ePS3RYaK5zl5Xi1l7tVy9oud59TyjDMlyedIVLpP4GV8jQDdDf+tt9polYN2tHjwl0ym3aW3nSTYbvIQR99zCxtH3uto8T2dE1cC3ZTiZLVthtIil/3RzAFBZtXlRfd8NaTStlvyTNbMwS1bP1aLrxSyL5jutdoZjCGhCF+Sd5R8agrk3LzjmbPU0y14LDKkmWFcV6ZVPNj9V37c1C9/1zevGXfWFlVPF+6UPZodGZXn/jRWa51Z4yjbhfTmhEwh+c/jvjHs8uZC/c8z13ynIB1L5LV6G6/VfIV7FnHCyE9H4b5nYu1/FhGVcnDNhvcPE5S9jovm9TPwvqPyJEZxj9fdhYf01FvDNFzaTJzlI9oGky6hwt1onlVNPVlm2evo4XNCS5e+dYJStaPfh+kUfcN+SnHbaki3dXa+x60F7GmYhAq7+2rxev8WNZitHlGy2726D5mPRsicP+SYqjSS8vTcib/XWtabWtHAsVThv0VP0plJ3q9pX5fQpSvzbeTa5ccre83wdPjivd4PPq+nt/baXXL5hltV9jsru01XxWFzmveHC6Vp6nJ+0jLuBnwfpeKs81w48F+2Oif50cnNdyv4Pwdsk8ePp03I5NT6/zTwjUW1363udrUr7sRq6RdDm8y9F1Fy+TVI8H9g51th2H5YLrF8Ead/Adyt8uDdCzA+8OPFv5svwYbqaVt/v0nzx+PBY4rOc3i7Xj4OWMfvaWkIX4/Hr3Og2gzIq/Le7dPv2ePPlKSrty+jm2gjbLezxOeh50DGNrN7Qjw/tzx5moT0qesNx3BuyvaA8cZCO0Ha32LvSwTUV5kr7RmVq2M/3z9sG5nQ2wdB3gsQwVdveBqVqdoeqCV2toFwU3WGH/QV4sfvlaIu5lirHcX1/4NYMhmoDrI2eYDjK1ZPaYq6BuY7yfAN9u7mZSsf5fu6Q/X6hvDjDs3ynn0rZ37eUB52GLtaOyiBxy6B0N+DaVEm1Dz7HJfYZ2OC6b/ueG9fXP5pLXcvIwZxc+lN/2+soBzpjTb8JrAr2B160RTvXciuLawPj5s42gmGn2LdreB/xUOfnfQ4vhkO/qHSPMd+p+tdYB+2+GYiOLp71wVHfGHq18UNldFNVqBLcpr7WpQ38vYXW8fkFttPHXp2mEpxj4BmXPe8etjPiOiWx7Qk+LvgHh15nwznAxwjathl4O1372GtkaPvxIVtsyL60H484KuJlBAPbAB60n5K+AryJGbC3gUPf6JcL2sBWeE8jct0Ujir9gLWtEswbju39nmK/n1NFPtLFQb5qLx8cwcZKyGPX98Jaexn6pW+JPacLjF+UqrAd6H2y38LqcU2xGeq8+/6YHuvs1nQ2anIc9oPdU44SusFn6vtFsNudrLX9UvqkXr/Gvfht7Tu4A8/DURM8O0psdrEVmy1p12NyiFgHPxyOc7TzHuTsQcfg9iVQ8Glw7pBT+LKp7fR+fbAdo+zRV7XvQR5FPylgN9hH0c/gPwvuXxBz2IetytiofLAgh7LXjcoDyNk7+CI4H3P9ApjAR8mBMoEJ9TG6w8g6l8XdyxKUsVXpX4tVsNXD2II2D1kOsS6lL4FbxvF9TDnpT4mH2Fd93Rzjse5C+pU30nHhlr40Nndze94IMrk2YgdipL8J0Pa9eBuQ/5K2MzaJD2MCfXHng9quIvIudjIujDpW2QErd48VfGmPFefusOoeYgfiJjnqFLBz4oaxEfdpwtYMxEvaeRNrNIEX1yghG+RhPBPuEJPhf2nHCp7UIS5KHPetoLJR+CvkRDxrMwaPYG8uObGxLn1EvYsPcMO4nLEm0LFPY95RiDXkrGMDZ8TffoXByKb/HmKvyCftUQmsIXfPY0xZsF3yHILPFIwjEn/hX8Aa4+9hwxHjHc8ji/L2hrF1ZKdyZu32PbHn3dmVaA7BSxUjeV7C77xqXfg1nhlyXhZ2jjMWMa4uZx/cj3muwLcj+ijjh7bRW/gU+ioMDNhEM5C8gzaq8cJZbUMHuzd8ZMxmLDe1DjH8UNo8o3f+XvPPg43tOK6Nq+kd0bZy7gU73ceHdzkjl+kYvMYm/IhylrRVVcJHMRbcb3tyBrq7eGEyLinkEMex3N/H+1HZR64HrHS8BV+IldS7xBmSdmC7/tE+wCrXbfoy5RLubOha+Qd4HZAzVRz3a05xPtCvqnh/OEsRC2A340Kf52PyRH5L6KljQUcZ4B8+sqBeEnvhP7mcQ8Od/394fkAnyi34ZIHH+CL2AzlGlU8ZsIWKnwXyDayJ702xMQ92AzmB3cFPwSF9vjoL6v0a35K5AdYS/4jN3dnC2MS4HpC/PX6wzwKYDeX8tCVOAL/ZwjjkEjwHEp0DTg5cSm6yP58W2/p4+CBtaGxxr0NuU8tVblfI790sfOhf+SlirDdKush9uxbqhNJmZfKddw5/Uk5+WP/a5lm5a1+eV3i7vp9f4dnv3H5dNFpy3dW5bLifGpeXvP26umq4l7/pBVT9iuly970S0jy95vj5VFZXFxfv3CG9V603f1m17vz4HdK3b80oeu8OaXoxuXAufou7ov0t3e9zV3RxhnjbC+hAV+3GpSe3xm7DNf/hfuP85n7z6f+3XD/xlgvVUmxLFf1zb7mwfmT/+lsuVpyshFmtfUF1gwxrYJQK2VLQVBmyxLw7HPPT6Uo2haoHlTTayEhZDbkcj2x5mh7aiyzQ4zGmw5uLTVAYBfQzJ20DfWM+L1GFIaPx0TYwFtnWAFWZ7NdBRnqviCkynljfnM2x/mijUAlwfcXbosQwOR/Z20YVBrKqKeSJN7wd0PKgcpJ2H2MijuHNDao9rIn9J8z+2qzIlxiLTK4tmVOGSs5CRivyQFfH9x6VkkzTd/DM1HJ3YlZ5ssfAreTocA1b40KsRjGyXhvjoXMU82YH/ZCf/PsbyT6BJdalfmve9sE+oMcXwRJrlbIuMnWffLQNVqkxK5YJbxsG7o6nLeXljRz0456mz6y5cJH9Pe7WJV8p+UTFTJmhwyIWXAYu5bC0HF/WijgPqMeXFP28Sap0VDGyVIvzlXwP1koqk051mzjleGazG2bEXWa7BdcR3YuJ1yEXMTDMx7xFQbUN/eKe1lMwwXhpY7whWS6qQ2C2kcwWMtI+g4dtTluCXW56N0rzO6CcMTEttc0A34EBnHi7KDZloso2xB4Tro2KYEDshSdybkyQRWOO2AMyc0tsQmNjaN7iSkaxZXsifHQy8jHmTVCbc0e0i1zzD7wS2HRhl7OklcF+wQsxWMK2O7ydQJXXxxpBKn5XkD/4hmBI/mmfXAvt0ZY3jsQVFe59Wvmp+AJvCohFID7QF9/ocTz3L0cmfUcJjrIHK5FM2wj1g++l1+CRNxycOy6pP/QrxZ8Tjo9og8CsX326xIWxjHawrfje6nVYNRIn3qhcc1/YC+xjwHm+2JrYXUF7EHlQ7Y3IY1aNpR65th3K4Fe2Or84iY2OnyBBb93dtubTmzh+REQcor7kfSMkZb1ZwPM0QxKN+mSXbOSaTWjF+6fR1pC7JN5nAaGevmsVFrC7JREjobWJ9dD7zKgg8iO5m1HiZWijFlSwzJ4n0V2jkNDbfFprMS5d7WniQZV1pH16aQE0cRrYVsj7zabiGFtHU+mvIm+/Gm9gPNBrUwZEh9QHw9MTdOLte+iMmpjp8HaE1eZ3olOiyt7I7VMK33tSjN2G+GGxs8+RnivnwkjHtULbMG2UGmiNYT97jcm/+HtB/hnDBF0ZS1lckYU3B4wflSymKiUWoDq/rmKZG1efYosSR+S74hpVfNHfqxhSVm2JS7zdxj6F+Dqr7YHEG71noXUDO6U+czoiu2DD8+pmW52FfsEYrX2840A3xA7GxYB+zpugLc+Nidg234hVZ50nWPEmnG97BE959rVeoXd4o/VTK/QP0tOTCr3KVu2/uV6//OEabxrOLr+9W+NdRJezybffosZznJMaz/zO6uDX1XhX79+QuI0r4/BznX92gXf5exd49js/8fp/gffjP2NQDOolEp2fXOD1UDj+6gIvkCvzfsFXQ/KqjK+X+do+Xa6CIa+o2Y7NwELieRhrD+R1+f6ZJa8rPB+FLhKxGyQOQ99hWvTuWubYkFdj2BPrlR+vNeVatn4tPWpGQ76K8/fzcCjyNRxfxeh9rH5WX/fsOQ9XJtyJvMbE+hH2UbG8hq/N4+uK4zlH4zP92n58tNdsYdTkloSE1++Cq3qITXzucf7CVyh8HS5z7/06B9O0jsUqngxjR16xDh9zvtaXV18HOeoyFFP9qvij56UUj5Jw1PRLzvSLT+cc4yH4EcfanOAdzud/JW/5Q/Ke8/Gj8upXwdUagbyirPj6Oi7UcLGpuCwGXgtywB9RpAgv5eeV+O8t+aFNLpjuCwe926O5OeY+qJKvYCNtG0+xvDZlMkh8erz8EBl8Z5oe7eGr6yNf2O1ZT/6cnrf4qcnfB0fXLvlr/r3pnv0dPwudPU9d/s6bOQOTtETneOFrdt5dy0em4Xq+z+5OfiBqyN8e2Nn07Cfif5nP1RBz3jnrd32vs2WYJW/Hy78HY7XD3SrBxnt+TOMkXXROcoj1avMazapZ9Z+Gnyx09m7BvvqXc7wUEI1n2dlSwute8f+B6u/43ek/mWr7Z1F9VmKcLvTDROPr4T8z6OGH/xNidf4D \ No newline at end of file diff --git a/docs/high-performance/images/cdn/cdn-overview.drawio b/docs/high-performance/images/cdn/cdn-overview.drawio new file mode 100644 index 00000000..93c40dff --- /dev/null +++ b/docs/high-performance/images/cdn/cdn-overview.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation-proxy.drawio b/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation-proxy.drawio new file mode 100644 index 00000000..7d8d0ae8 --- /dev/null +++ b/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation-proxy.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation.drawio b/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation.drawio new file mode 100644 index 00000000..363a743b --- /dev/null +++ b/docs/high-performance/images/read-and-write-separation-and-library-subtable/read-and-write-separation.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/high-performance/read-and-write-separation-and-library-subtable.md b/docs/high-performance/read-and-write-separation-and-library-subtable.md index 40af3c6a..92302ac5 100644 --- a/docs/high-performance/read-and-write-separation-and-library-subtable.md +++ b/docs/high-performance/read-and-write-separation-and-library-subtable.md @@ -2,19 +2,18 @@ title: 数据库读写分离和分库分表 category: 高性能 head: + - - meta + - name: keywords + content: 读写分离,分库分表,主从复制 - - meta - name: description - content: 相信很多小伙伴们对于读写分离和分库分表这两个概念已经比较熟悉了,这篇文章全程都是大白话的形式,希望能够给你带来不一样的感受。 + content: 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 读写分离基于主从复制,MySQL 主从复制是依赖于 binlog 。分库就是将数据库中的数据分散到不同的数据库上。分表就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。 --- 相信很多小伙伴们对于这两个概念已经比较熟悉了,这篇文章全程都是大白话的形式,希望能够给你带来不一样的感受。 如果你之前不太了解这两个概念,那我建议你搞懂之后,可以把自己对于读写分离以及分库分表的理解讲给你的同事/朋友听听。 -**原创不易,若有帮助,点赞/分享就是对我最大的鼓励!** - -_个人能力有限。如果文章有任何需要补充/完善/修改的地方,欢迎在评论区指出,共同进步!_ - ## 读写分离 ### 何为读写分离? @@ -23,7 +22,7 @@ _个人能力有限。如果文章有任何需要补充/完善/修改的地方 我简单画了一张图来帮助不太清楚读写分离的小伙伴理解。 -![读写分离](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/java-guide-blog/9c624bc130d053860a5089cb9a53310a.png) +![读写分离示意图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/read-and-write-separation-and-library-subtable/read-and-write-separation.png) 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。 @@ -67,7 +66,7 @@ hintManager.setMasterRouteOnly(); **1.代理方式** -![读写分离-代理层](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/java-guide-blog/461112716e30db118f4c784adc6e2ff7.png) +![代理方式实现读写分离](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/high-performance/read-and-write-separation-and-library-subtable/read-and-write-separation-proxy.png) 我们可以在应用和数据中间加了一个代理层。应用程序所有的数据请求都交给代理层处理,代理层负责分离读写请求,将它们路由到对应的数据库中。 @@ -79,7 +78,7 @@ hintManager.setMasterRouteOnly(); 这也是我比较推荐的一种方式。这种方式目前在各种互联网公司中用的最多的,相关的实际的案例也非常多。如果你要采用这种方式的话,推荐使用 `sharding-jdbc` ,直接引入 jar 包即可使用,非常方便。同时,也节省了很多运维的成本。 -你可以在 shardingsphere 官方找到[sharding-jdbc 关于读写分离的操作](https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/usage/read-write-splitting/)。 +你可以在 shardingsphere 官方找到 [sharding-jdbc 关于读写分离的操作](https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/usage/read-write-splitting/)。 ### 主从复制原理了解么? @@ -193,3 +192,13 @@ ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere - 重复上一步的操作,直到老库和新库的数据一致为止。 想要在项目中实施双写还是比较麻烦的,很容易会出现问题。我们可以借助上面提到的数据库同步工具 Canal 做增量数据迁移(还是依赖 binlog,开发和维护成本较低)。 + +## 总结 + +- 读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 +- 读写分离基于主从复制,MySQL 主从复制是依赖于 binlog 。 +- **分库** 就是将数据库中的数据分散到不同的数据库上。**分表** 就是对单表的数据进行拆分,可以是垂直拆分,也可以是水平拆分。 +- 引入分库分表之后,需要系统解决事务、分布式 id、无法 join 操作问题。 +- ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere 的功能完善,除了支持读写分离和分库分表,还提供分布式事务、数据库治理等功能。另外,ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁。 + + diff --git a/docs/home.md b/docs/home.md index 8dc35dbc..3a15ea1d 100644 --- a/docs/home.md +++ b/docs/home.md @@ -355,7 +355,11 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle ### 负载均衡 - [负载均衡](./high-performance/load-balancing.md) + [负载均衡](./high-performance/load-balancing.md) + +### CDN + +[CDN(内容分发网络)](./high-performance/cdn.md) ## 高可用 diff --git a/docs/system-design/security/design-of-authority-system.md b/docs/system-design/security/design-of-authority-system.md index 03482e52..1e1c3af3 100644 --- a/docs/system-design/security/design-of-authority-system.md +++ b/docs/system-design/security/design-of-authority-system.md @@ -175,7 +175,7 @@ head: 角色与用户管理都是可以直接改变用户权限的核心模块,整个设计思路如下图: -![角色与用户管理模块设计](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/design-of-authority-system:role-and-user-management.png) +![角色与用户管理模块设计](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/role-and-user-management.png) 这个模块设计重点是需要考虑到批量操作。无论是通过角色关联用户,还是给用户批量增加/删除/重置权限,批量操作的场景都是系统需要设计好的。