zoukankan      html  css  js  c++  java
  • 云时代架构--阅读笔记--01

      开始是从云时代架构的最新一期开始看的,也就是3月1号,作者今天的问题是分库分表就能实现无限扩容吗?

      服务的扩容,其实刚阅读时我并不太懂,于是我就自行百度了一下,大概的意思就是现有性能不能满足将来的更多需求,所以要进行服务器的调整来满足更多的请求。

      作者从不同应用开始介绍,单体应用是最早的应用形态,不需要太关注整体性能,项目规模中小型时,开发和部署都挺方便。它的优点是方便调试,代码都在一起,所有服务都在本地容器部署,没有分布式花销,不需要太多资源。而RPC应用, RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

      扩容应用,作者首先介绍通过分库分表的方式来解决业务的访问量增大,服务关系错综复杂、高并发,多用户等新需求,但是通过举例说明了扩容应用的同事,每个数据库连接数就要增加,但是仅仅通过增加数据,也不能解决连接数的问题。以此引出单元化一词,简单来说解释在数据连接数过多时,尽量不让应用连接所有的数据库。通过一个规则(通过用户ID Hash,有配置中心广播hash规则),然后用户从DNS那里进去的时候,就可以知道自己那个应用,这样,所有的组件都能保持一致的规则,从而正确的访问到数据库。

      分库分表并不能解决“无限扩容”的问题,只能单元化才能解决这问题。单元化带来更多的思路。有了单元化,解决了无限扩容的问题,但我们又会面临新问题-。

      

      一致性Hash 算法分析内置多种路由策略供使用者根据自己的场景选择,同时提供简单的 API 供用户自定义自己的路由策略。

      特点:

        1.构造一个 0~2^32-1 大小的环。

        2.服务节点经过 hash 之后将自身存放到环中的下标中。

        3.客户端根据自身的某些数据 hash 之后也定位到这个环中。

        4.通过顺时针找到离他最近的一个节点,也就是这次路由的服务节点。

        5.考虑到服务节点的个数以及 hash 算法的问题导致环中的数据分布不均匀时引入了虚拟节点。

      

      为了解决这个问题,一致哈希算法引入了虚拟节点。将每一个节点都进行hash,生成多个节点放置在环上(虚拟节点)。自定义一个有序数组来模拟这个环,流程如下

      ①初始化一个长度为 N 的数组。

      ②将服务节点通过 hash 算法得到的正整数,同时将节点自身的数据(hashcode、ip、端口等)存放在这里。

      ③完成节点存放后将整个数组进行排序(排序算法有多种)。客户端获取路由节点时,将自身进行 hash 也得到一个正整数;

      ④遍历这个数组直到找到一个数据大于等于当前客户端的 hash 值,就将当前节点作为该客户端所路由的节点。

      ⑤如果没有发现比客户端大的数据就返回第一个节点(满足环的特性)。

     

  • 相关阅读:
    2018常用DOM操作总结
    emlog实现全站pjax无刷新加载页面
    深入理解Vuex 框架
    2018前端最火的web UI框架
    小程序快递单号查询
    表单元素系列二
    表单元素系列一
    表单提交
    AJAX 回调函数刷新页面问题
    electron 常用命令
  • 原文地址:https://www.cnblogs.com/zhao-teng-ass/p/10508131.html
Copyright © 2011-2022 走看看