谈谈 ServerFul 架构
我写了一篇文章 《自己实现一个线程池》 https://www.cnblogs.com/KSongKing/p/9803935.html ,
其实 不仅仅 是 线程池, 中间件 层 的 服务 我们 都可以 重新 写一遍, 比如 Hadoop, HBase, MapReduce, 又或者 Dubbo , ZooKeeper 之类的 “分布式服务计算框架” , 都可以 重新 写 一遍 。 这些 并不稀奇 。
基于 虚拟机(Java JVM 或者 .Net CLR) 的 技术 本身 并不复杂, 或者说, 虚拟机(Java JVM 或者 .Net CLR) 层 以上 的 技术本身 并不复杂 。
实现 虚拟机(Java JVM 或者 .Net CLR) 的 技术 是 复杂 的 , 但是 虚拟机(Java JVM 或者 .Net CLR) 层 以上 的 技术 并不复杂 。
虚拟机(Java JVM 或者 .Net CLR) 层 以上 的 技术 就是 中间件 和 业务系统 。
事实上 虚拟机(Java JVM 或者 .Net CLR) 本身就是为了 简化开发 所以才出现的 。
虚拟机(Java JVM 或者 .Net CLR) 中间件 层 最复杂 的 技术 大概就是 多线程 , 最多就是 字节码 (IL OpCode) 。
没了 。
但是 虚拟机(Java JVM 或者 .Net CLR) 本身的 实现 是 复杂的, 是 核心技术 。
这部分 技术 集 计算机 软件 技术 之 大成,
首先, 紧密贴近 操作系统,
其次, 编译器 越来越复杂, 因为 语言特性 越来越 复杂, 语言越来越多,
对 效率 的 优化 也 越来越多,
但是 我们 仍然 要 支持 开源
在 中间件 层 的 开源 也是 很有意义 的
中间件层 以上的 软件技术,
主要 Focus 在
分布式通信
快速开发
快速 生产 安全稳定 的 业务系统
快速应对 需求变化
维持 业务系统 的 稳定
运维
应对 大规模 访问 (使用 计算) 要 突破 现有的 集中式 架构 对于 大规模访问 的 瓶颈, 需要 客户端 智能化 和 服务器 多中心化, 参考我之前写的一篇文章 《Grid Virtual Server 和 网格计算》 https://www.cnblogs.com/KSongKing/p/9486434.html
伸缩性 (弹性)
我发表过 一篇 博客 《未来需要的是 轻量操作系统 而不是 容器》 https://www.cnblogs.com/KSongKing/p/9259628.html
事实上
要实现 上述目标
虚拟机 + 中间件服务 + 产生式编程 + DevOps (这里的 虚拟机 是 硬件虚拟化 的 虚拟机, 不是 JVM 和 .Net CLR 的 那个 虚拟机)
就可以
没有必要用 容器
也没有必要 “无服务器” (ServerLess)
所以, 我提出一个 “ServerFul” 架构, ServerFul 架构就是 n 台 Server 通过 网络通信 的 方式 协作在一起 。
也可以说 ServerFul 架构是 虚拟机 + 中间件服务 + 产生式编程 + DevOps ,
也可以说 ServerFul 架构是 基于 Server 和 网络通信(分布式计算) 的 软件实现架构 , Server 可以是 虚拟机 物理机 , 以及 基于硬件实现的 云 的 云服务器 。
有网友问, “假如你100个虚拟机 + 100个中间件,你怎么管理? 不还是用类似于容器的来操作。”
我的想法是, 用 网络通信 的 方式 管理 。 即用 网络通信 的方式 管理 服务器 群 。
容器 我想 它 的 管理方式 有 2 种,
1 对于 同一个 物理主机 内 多核 的 管理
2 对于 多个 物理主机 的 管理
对于 1 , 应该是 用 操作系统 层面 的 技术
对于 2 , 应该仍是用 网络通信 的技术
只是,
原本 基于 网络通信 的 技术, 透明直观, 现在 被 容器 包含进去了 吧 ! ^^
包括像 Service Mesh 这样的技术, 也是 基于 容器 的
容器是一个 操作系统 层面的 技术
我的想法是,
用 中间件 的 技术 来 管理 服务器 集群
而不是 用 操作系统 的 技术
我知道的不多, 不过 对于 CPU 资源 的 管理分配 , 这应该是 操作系统 层面的技术
不过 现在 容器 似乎把 更大范围 的 服务器集群 管理 之类 的 也 包含到 自身里了
容器 的核心代码 应该是 操作系统 内核代码 的 一部分
容器 客户端 应该是跟 核心代码 通信
容器 实际上 应该是 修改了 操作系统 进程管理 的 代码
来实现 CPU 资源分配
或者说,
容器 实现了一个 “进程组”(进程 Group)
一组进程 就是一个 容器,也相当于是一个 小虚拟机
这部分是 修改了 操作系统 内核代码 中的 进程管理 部分
这应该是 容器 的 核心
此外的话,就是 对于 存储资源 的 管理
内存 到 磁盘
我猜的 ~
再次就是 网络通信
大概 可以 虚拟 网卡
一个 网卡 虚拟成 多个 虚拟网卡 来提供给 多个 容器 和 外界通信
这也是 操作系统 内核 , 属于 内核中 网络通信 的 部分, 网卡驱动
同时
像 Service Mesh 这样负责根据 业务 提供一个 虚拟网络 通路 的 技术
也 是 基于 容器 的
事实上 不基于 容器 也可以实现 这种 虚拟网络通路
只是 现在 流行 使用 容器 吧 ~ !
还有
Kubernates 还包含了 管理 服务器 集群 的 能力
前段 时间 看到 文章说,
Kubernates 在 国外 某个 大学 (好像是, 反正大概是 科研单位 之类的)
为一个 项目 管理 了 上千台 服务器
用于 科学计算 之类的 吧 ?
虚拟网路通路 最核心基本 的 技术应该是 虚拟网卡
Service Mesh 基于 容器 , 虚拟网卡 可能是 最主要的原因
这个 不需要 容器 也可以实现
虚拟机 (VMWare 之类的) 应该已经实现
还有另外一个原因
就是 现在流行用 容器
所以, Service Mesh 直接选择了 容器 作为 基础架构
虚拟网卡 实际上 就是 一个 网卡驱动程序
在 网卡驱动程序 里 对 包 作一些 Wrap 和 UnWrap
逻辑 上 跟我们 中间件层 写 AOP 之类的 差不多
或者 Http 代理 , Http 拦截器(Interceptor) 之类的 差不多
跟 Asp.net 里的 HttpModule
Asp.net Core 里的 MiddleWare 差不多
当然 这样 虚拟来 虚拟去
效率 肯定 打折扣
服务器 集群 管理, 其中一个工作就是 批量部署, 或者说 镜像部署, 或者说 克隆部署
这也可以用 中间件 技术 实现
本质上就是 拷贝文件 嘛 !
虚拟网卡 的 实现, 相当于 在 驱动程序 里 要加入一份 IP 协议 的 逻辑, 把 数据 按 虚拟网卡(IP) 处理后, 再传给 操作系统 的 IP 协议
这样就相当于 经历了 2 次 IP 协议 的 处理
效率自然会受影响
当然, VMWare 也可以 修改 操作系统 内核
即 直接 修改 操作系统 的 IP 协议, 在 操作系统 的 IP 协议 中 加入 虚拟网卡(IP) 的 逻辑
这样将 虚拟网卡(IP) 的 工作 合并 到了 操作系统 的 IP 协议 里
可以 减少一些 重复的 工作量
但 对于 效率 仍然有 影响
同时, 这种 做法,
修改了 操作系统 内核,
会 造成 代码版本 不好 管控
操作系统 代码 变得 复杂,
且 难于 管控
比如, 这个 操作系统 修改了 内核代码
就需要 考虑 Merge 的问题
或者 操作系统 修补了 某个 漏洞
也同样 需要 考虑 Merge 的 问题
谈谈 ServerFul 架构的更多相关文章
- 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager
大家好, 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...
- 谈谈UI架构设计的演化
谈谈UI架构设计的演化 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Reenskaug在跟一些人的讨 ...
- 谈谈三层架构中Model的作用
Model又叫实体类,这个东西,大家可能觉得不好分层.包括我以前在内,是这样理解的:UI<-->Model<-->BLL<-->Model<-->DAL ...
- 谈谈.NET架构师面试及如何设计面试题
上星期:应老东家的要求,帮其面试.NET架构师. 于是:老东家进行了一星期的简历收集: 终于:在一堆简历里,精挑细选了四个: 约了:周末上午下午各两个. 面试者年龄:在30-35岁左右,差不多10年. ...
- MySQL系列(一):谈谈MySQL架构
MySQL整体架构 与所有服务端软件一样,MySQL采用的也是C/S架构,即客户端(Client)与服务端(Server)架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端 ...
- 迷惑很久,仅以个人想法谈谈MVC架构,希望大家多给点意见
博主是非科班出身,所以和大部分新手有着一样的困惑,究竟什么才能算是MVC框架,总是在谈Model,View,Controller分离,可是究竟什么才能算是分离,而他们又是负责什么样的分工呢. 大二的时 ...
- 谈谈APP架构选型:React Native还是HBuilder
原文链接 导读:最近公司的一款新产品APP要进行研发,老大的意思想用H5来做混合APP以达到高效敏捷开发的目的.我自然就开始进行各种技术选型的调研,这里重点想说的是我最后挑选出的2款hybrid ap ...
- 转:Spine.JS+Rails重客户端Web应用技术选型思路:『风车』架构设计
原文来自于:http://www.infoq.com/cn/articles/fengche-co-architecture 风车这个项目开始于 2011 年 11 月份,之前叫做 Pragmatic ...
- 你真的了解分层架构吗?——写给被PetShop"毒害"的朋友们
一叶障目 .NET平台上的分层架构(很多朋友称其为“三层架构”),似乎是一个长盛不衰的话题.经常看到许多朋友对其进行分析.探讨.辩论甚至是抨击.笔者在仔细阅读了大量这方面文章后,认为许多朋友在分层架构 ...
随机推荐
- 【转载】URL编码与两次encodeURI
当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码. encodeURI函数采用UTF-8对 ...
- 如何在nginx容器中使用ping、nslookup、ip、curl 等工具?
Nginx镜像太精简了,启动一个容器进行测试时,常用的网络工具都没有,可以使用下面的命令进行安装.也可以直接起一个busybox容器进行测试. apt update #ping apt install ...
- HRBUST 1186 青蛙过河 (思路错了)
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串 ...
- JS打开新窗口防止被浏览器阻止的方法
这篇文章主要介绍了JS打开新窗口防止被浏览器阻止的方法,分析对比了常用方法与改进方法,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了JS打开新窗口防止被浏览器阻止的方法.分享给大家供大家参考. ...
- 第 8 章 容器网络 - 069 - Calico 的默认连通性
相同calico 网络之间的连通性 测试一下 bbox1 与 bbox2 的连通性: ping 成功,数据包流向如下图所示. 1)根据 bbox1 的路由表,将数据包从 cal0 发出. 2)数据经过 ...
- 3分钟快速presentation
来自英语课的一个练习: https://www.youtube.com/watch?v=ePY3uY1L0X0 next up I'd like to welcome Joshua to ten he ...
- mean
import caffe import numpy as np MEAN_PROTO_PATH = 'mean.binaryproto' # 待转换的pb格式图像均值文件路径 MEAN_NPY_PAT ...
- js中Undefined 和 Null的区别
Undefined 和 Null Undefined 这个值表示变量不含有值. 可以通过将变量的值设置为 null 来清空变量. <!DOCTYPE html> <html> ...
- 『TensorFlow』使用集合collection控制variables
Variable Tensorflow使用Variable类表达.更新.存储模型参数. Variable是在可变更的,具有保持性的内存句柄,存储着Tensor 在整个session运行之前,图中的全部 ...
- sublime-代码提示
py的话安装这个插件: Anaconda user配置 { "python_interpreter":"F:/PY3/python.exe", "su ...