摘要:Kubernetes 集群通过可靠和可扩展的方式对容器化应用进行托管,使得在 DevOps 思维和体系中,让运维服务、系统升级等工作变得超级简单。 Multipass 是一款可运行于 Linux、Windows 和 MacOS 的轻量级虚拟机管理器,它专为希望使用单个命令即可启动全新 Ubuntu 环境的开发人员而设计。它在 Linux 上使用 KVM、在 Windows 上使用 Hyper-V、在 MacOS 上使用 HyperKit,以便以最小的开销运行虚拟机。它还可以在 Windows 和 MacOS 上使用 VirtualBox。Multipass 将协助你获取最新镜像,并持续保持更新。 MicroK8S 是 CNCF 认证的 Kubernetes 部署环境,可在工作站或边缘设备上运行。作为一个 snap 包,它可以原生的运行所有 Kubernetes 服务,如果需要还可以打包类库和二进制文件。它的安装仅受限于你的下载速度,而删除 MicroK8S 后不会留下任何痕迹。 阅读全文
posted @ 2020-05-30 18:10 sangmado 阅读(483) 评论(1) 推荐(0) 编辑
摘要:在20世纪80年代末期和90年代早期,面向对象编程彻底改变了软件的开发方式,使用模块化的组件进行应用程序构建变得更为普遍。时至今日,我们看到分布式系统开发也在进行类似的变革,基于容器化软件组件构建的微服务架构正在变得越来越流行。容器,依赖其在容器化领域内创立的多重优点,已经成为分布式系统构建的基础"对象"。随着架构风格的成熟,我们也看到了设计模式的涌现,就像我们在面向对象编程时一样,出于对细粒度代码细节的封装抽象,最终揭示了在各种应用程序和算法中相通的更高级的设计模式。这篇论文描述了我们在基于容器构建的分布式系统中识别出的三种类型的设计模式:用于容器管理的单容器模式,多容器紧密协作的单节点模式,用于分布式算法的多节点模式。就像面向对象设计模式一样,这些为分布式计算而生的设计模式引入了最佳实践,简化了代码开发,并提升了使用它们的系统的可靠性。 阅读全文
posted @ 2020-05-04 18:31 sangmado 阅读(119) 评论(0) 推荐(0) 编辑
摘要:Sangmado 涵盖了支撑 .NET/C# 项目开发的最基础的公共类库,为团队在不断的系统开发和演进中发现和积累的最公共的代码可复用单元。Sangmado 公共类库设计原则:独立性:不与任何业务框架或业务应用耦合;依赖性:最小化外部类库依赖,选择最稳定的依赖库版本;分离性:分离重用关注点,满足 Separation of Concerns;兼容性:通过 x.y.z 版本号控制兼容性;易用性:发布 nuget 包,可在任意环境使用;开源性:使用 GitHub 代码管理,PR 功能开发; 阅读全文
posted @ 2017-08-10 16:47 sangmado 阅读(3038) 评论(12) 推荐(13) 编辑
摘要:Redola.Rpc 是一个使用 C# 开发的 RPC 框架,代码开源在 GitHub 上。目前版本仅支持 .NET Framework 4.6 以上版本,未来待系统稳健后再考虑移植 .NET Standard 和 .NET Core。Redola.Rpc 在 0.3.2 版本中,尝试解决几个 RPC 设计问题: 我是谁?(Local Actor) 如何告诉别人我是谁?(Actor Directory) 我提供什么服务?(Service Catalog Provider) 如何告诉别人我提供什么服务?(Service Directory) 我需要的服务在哪里?(Service Discovery) 如何调用该服务?(Service Dynamic Proxy) 如何找到该服务?(Actor Directory) 如何发消息给该服务?(Remote Actor)。通过集成 Consul 服务,使得 Redola.Rpc 有能力进行服务发现和负载均衡策略的实施。 阅读全文
posted @ 2017-08-02 08:23 sangmado 阅读(1767) 评论(1) 推荐(6) 编辑
摘要:Redola.Rpc 是一个基于 C# 的轻量级 RPC 框架,源代码托管在 GitHub 上,并且发布了 nuget.org 上的可安装软件包。Redola.Rpc 基于 Cowboy.Sockets 进行构建,使用 TCP Socket 进行服务间通信,默认使用 .NET APM TCP Socket 模式。通过 Actor 模型抽象封装 Socket 连接与交互,实现 Actor 之间的 Register、Lookup、Handshake、KeepAlive 等功能;Actor Peer 与 Actor Peer 之间通过 TCP 长连接进行通信。Actor 封装了 TCP 中关于 TcpClient 和 TcpServer 的抽象,对外不再暴露 Client 和 Server 的概念,仅以 Peer 呈现,Peer 与 Peer 之间是平等的。Actor Master 与其他 Peer 的区别仅是承担了 Register 和 Lookup 的职责。Actor Peer 间通过 Actor Master 查询到需要通信的对端 Actor Peer 的 Actor Identity 阅读全文
posted @ 2016-10-25 18:33 sangmado 阅读(2650) 评论(16) 推荐(18) 编辑
摘要:Cowboy.WebSockets 是一个基于 .NET/C# 实现的开源 WebSocket 网络库,其完整实现了 RFC 6455 (The WebSocket Protocol) 协议标准,并部分实现了 RFC 7692 (Compression Extensions for WebSocket) 协议标准。Cowboy.WebSockets 中对于 WebSocket 的 Client/Server 分别做了实现。Cowboy.WebSockets 的内部实现是基于 Cowboy.Sockets 中的 TAP 模式的 AsyncTcpSocketServer 和 AsyncTcpSocketClient 。关于 Cowboy.Sockets 可以参考文章《C#高性能TCP服务的多种实现方式》。 阅读全文
posted @ 2016-02-06 06:31 sangmado 阅读(9417) 评论(59) 推荐(23) 编辑
摘要:本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式,包括但不限于如下内容:APM 方式,即 Asynchronous Programming Model;TAP 方式,即 Task-based Asynchronous Pattern;SAEA 方式,即 SocketAsyncEventArgs;RIO 方式,即 Registered I/O。在 .NET/C# 中对于 Socket 的支持均是基于 Windows I/O Completion Ports 完成端口技术的封装,通过不同的 Non-Blocking 封装结构来满足不同的编程需求。以上方式均已在 Cowboy.Sockets 中有完整实现,并且 APM 和 TAP 方式已经在实际项目中应用。Cowboy.Sockets 还在不断的进化和完善中,如有任何问题请及时指正。 阅读全文
posted @ 2016-02-05 14:42 sangmado 阅读(68512) 评论(104) 推荐(128) 编辑
摘要:在各种软件质量模型的描述中,都包含着软件可维护性(Maintainability)这一属性。而越是生命周期长的软件,对其软件可维护性的要求越高。而提高软件可维护性的根本方式就是编写可阅读的代码,让其他人理解代码的时间最小化。代码生来就是为人阅读的,只是顺便在机器上执行以完成功能。在漫长的软件生命周期中,我们有很多机会去修改软件代码,比如发现了新的 Bug、增加新的功能、改进已有功能等。修改代码的第一步当然就是阅读代码,以了解当前的设计和思路。如果代码都读不懂的话,何谈修改呢?还有,大概率条件下,修复自己实现模块的 Bug 的人通常就是你自己,如果时隔几个月后自己都读不懂自己编写的代码,会是什么感受呢?所以,如何编写出易读的代码就成了问题的关键。而能否编写出易读代码,则直接取决于软件工程师自己的的编程风格和代码品味。 阅读全文
posted @ 2015-05-04 16:22 sangmado 阅读(26221) 评论(105) 推荐(212) 编辑
摘要:K-Means 是一种基于距离的排他的聚类划分方法。K-Means 基本原理:给定划分数量 k。创建一个初始划分,从数据集中随机地选择 k 个对象,每个对象初始地代表了一个簇中心(Cluster Centroid)。对于其他对象,计算其与各个簇中心的距离,将它们划入距离最近的簇。采用迭代的重定位技术,尝试通过对象在划分间移动来改进划分。所谓重定位技术,就是当有新的对象加入簇或者已有对象离开簇的时候,重新计算簇的平均值,然后对对象进行重新分配。这个过程不断重复,直到各簇中对象不再变化为止。K-Means 算法最常见的实现方式是使用迭代式精化启发法的 Lloyd's algorithm。 阅读全文
posted @ 2015-02-09 23:06 sangmado 阅读(17184) 评论(3) 推荐(6) 编辑
摘要:流网络(Flow Networks)指的是一个有向图 G= (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0。如果 (u, v) ∉ E 则可以规定 c(u, v) = 0。流网络中有两个特殊的顶点:源点 s (source)和汇点 t(sink)。为方便起见,假定每个顶点均处于从源点到汇点的某条路径上,就是说,对每个顶点 v ∈ E,存在一条路径 s --> v --> t。因此,图 G 为连通图,且 |E| ≥ |V| - 1。 阅读全文
posted @ 2015-02-06 03:32 sangmado 阅读(34220) 评论(7) 推荐(4) 编辑