如何提高代码的扩展性(1)

简介: 如何提高代码的扩展性(1)

一、架构的高可用?(不是本文的重点)


image.png


(1)【客户端层】到【反向代理层】的高可用,是通过反向代理层的冗余来实现的。以nginx为例:有两台nginx,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。当nginx挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-nginx,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。


(2)【反向代理层】到【站点层】的高可用,是通过站点层的冗余来实现的。假设反向代理层是nginx,nginx.conf里能够配置多个web后端,并且nginx能够探测到多个后端的存活性。当web-server挂了的时候,nginx能够探测到,会自动的进行故障转移,将流量自动迁移到其他的web-server,整个过程由nginx自动完成,对调用方是透明的。


(3)【站点层】到【服务层】的高可用,是通过服务层的冗余来实现的。“服务连接池”会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。当service挂了的时候,service-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的service,整个过程由连接池自动完成,对调用方是透明的(所以说RPC-client中的服务连接池是很重要的基础组件)。


(4)【服务层】到【缓存层】的高可用,是通过缓存数据的冗余来实现的。

缓存层的数据冗余又有几种方式:第一种是利用客户端的封装,service对cache进行双读或者双写。缓存层也可以通过支持主从同步的缓存集群来解决缓存层的高可用问题。当redis主挂了的时候,sentinel能够探测到,会通知调用方访问新的redis,整个过程由sentinel和redis集群配合完成,对调用方是透明的。


   (5)【服务层】到【数据库读】的高可用,是通过读库的冗余来实现的。

既然冗余了读库,一般来说就至少有2个从库,“数据库连接池”会建立与读库多个连接,每次请求会路由到这些读库。当读库挂了的时候,db-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的读库,整个过程由连接池自动完成,对调用方是透明的(所以说DAO中的数据库连接池是很重要的基础组件)。


(6)【服务层】到【数据库写】的高可用,是通过写库的冗余来实现的。

以mysql为例,可以设置两个mysql双主同步,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。自动故障转移:当写库挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-db-master,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。


image.png


X轴和Z轴已经趋于成熟。以后的发展方向必定是业务功能的发展,代码的高可用。


二、软件项目的变化(为什么要提高代码的可扩展性【背景】)



image.png

image.png


软件设计的唯一产出物---代码

面向对象的目的是模块化

相关文章
|
存储 传感器 安全
|
算法 知识图谱
极简ECDSA
该文章以极简的方式介绍了ECDSA(椭圆曲线数字签名算法)的基本原理,包括私钥和公钥的生成、签名过程、以及验证签名的方法,旨在帮助读者轻松掌握ECDSA的核心概念。
346 6
极简ECDSA
|
存储 JavaScript
TypeScript三
在 TypeScript 中,数组可以通过类型定义,如 `number[]` 或 `string[]`。示例展示了数字和字符串数组的声明与访问。数组解构允许将数组元素赋值给多个变量。通过 `for...in` 循环可遍历数组。多维数组如 `number[][]` 存储嵌套数组。数组方法包括:`concat()` 连接数组,`every()` 检查所有元素是否满足条件,`filter()` 过滤符合条件的元素,`forEach()` 对每个元素执行回调,`indexOf()` 查找元素位置,`join()` 将数组转为字符串,`map()` 应用函数于每个元素并返回新数组
217 3
|
关系型数据库 MySQL PHP
php开发中MySQL时间类型筛选语句的解决方案
php开发中MySQL时间类型筛选语句的解决方案
164 0
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
484 2
|
存储 安全 JavaScript
XSS--概念、类型、实战--分析与详解[pikachu]
XSS--概念、类型、实战--分析与详解[pikachu]
1951 0
|
监控 安全 项目管理
信管第六章---项目管理概论(听课版)
【1月更文挑战第8天】乘风破浪会有时,直挂云帆济沧海
563 1
|
SQL Java 数据库连接
MyBatis Plus 入门
MyBatis Plus 入门
198 0
|
SQL 存储 关系型数据库
数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.1 - 3.3)(下)
数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.1 - 3.3)(下)
|
数据安全/隐私保护 C语言
C语言:编写代码实现,模拟用户登录情景,并且只能登录三次
思路: 总体思路: (一). 生成相关变量、存放输入数据的字符数组, 再设置一个变量flag方便后面判断密码是否一致, 一致则把flag改为1,不一致则还是0。
494 0

热门文章

最新文章