ENode 1.0 - 框架的物理部署思路
开源地址:https://github.com/tangxuehua/enode
上一篇文章,介绍了enode框架的总体目标,以及如何实现高吞吐、低延迟、高可用、无单点问题的实现思路。本篇文章,我们再分析一下其他一些需要考虑的问题。我发现写文章挺累的,费时费脑经,但我会坚持下去。本文主要分析一下enode框架的物理部署:
物理部署思路:集群的web站点+分布式缓存和存储
集群的概念:多台机器做相同的业务,对外如一台机器在做事情一样,集群中任意一台机器挂了没有影响,因为其他机器还在工作;集群的机器要访问的数据的设计,我觉得一般有两种思路:
- 集群中每台机器都用自己的数据。数据一致性是通过每台机器之间的数据同步来实现,这样做的主要难题是数据同步的延迟带来的数据不一致的问题;但是好处是,因为没有任何共享数据,所以一台机器挂了完全对整个系统没有任何影响。因为这样的设计相当于是完全同时由很多独立的且没有共享任何数据的机器在同时工作,当然是最能容灾的了;
- 有一台机器存放数据的共享数据,集群中每台机器都访问这些共享数据。这种设计的好处是数据不用同步了,没有数据延迟带来数据不一致的问题;但是坏处是,有单点问题,万一共享数据的服务器挂了不是麻烦了。幸好,现在有很多开源的成熟的分布式缓存和分布式存储的产品,如memcached, redis这些都是分布式的缓存,可以有效的避免单点故障的问题,虽然挂了的单台memcached服务器会影响一部分数据的读取和写入,但是至少不会给整个系统带来挂掉的后果;同样分布式存储如mongodb,也能做到这样的效果。这两种产品,在分布式部署方面我还没有任何实际经验,平时工作中也不曾遇到过,所以今后还需要好好的学习和实践。
分布式的概念:一个业务在不同的物理点上做,比如web服务器(处理UI逻辑)、应用服务器(处理业务逻辑),这两个节点分开部署在不同的机器上,共同完成一个业务;分布式的特点是,每个节点都不能挂,否则这个业务就不能完成了;当然,我们可以给分布式中的每个节点都做集群处理,这样可以降低分布式系统的单节点故障; 但是因为分布式要完成一个业务,内部要夸网络通信如调用远程服务,所以性能肯定比没有调用远程服务的设计要低。一般我们不会采用分布式,用分布式都是被逼的,比如以下情况下,我们可能会采用分布式的设计:
- 一个系统,有几大块业务,相互比较独立,为了让每块业务都能独立设计和发展,我们会把这些不同的业务模块分开设计与实现;比如一个电子商务网站的交易中心和商品中心,可以独立分开设计;
- 数据量太大,没办法存放在一个点,所以只能分开存储;这种情况我们一般会把数据分区,不同分区的数据放在不同的点;如数据库的分库分表,还有一些分布式缓存如memcached、redis,还有如mongodb这样的支持分布式存储的文档型数据库;
- 一个系统,不同的层次使用完全不同的技术实现,比如由于历史原因,我们要对一个系统改造,但是这个系统的业务逻辑很复杂,而且都是用c++写的,我们不敢随便动;但是我们希望可以在UI上给这个系统重新设计以带来更好的用户体验,比如原来是用c++写的界面,现在希望通过WPF这种更高级更炫开发维护成本更炫的技术来实现。那么我们就会在同一个系统使用不同的语言和技术来实现。这种情况下,我们可能需要将c++实现的业务逻辑通过远程服务暴露出来,比如通过WCF暴露,WCF远程服务本身可以由c#编写,然后c#调用managed c++,然后managed c++调用unmanaged c++。从而实现业务逻辑的远程服务暴露;而在UI层,我们可以使用c#+WPF的方式来实现,然后UI层调用WCF远程服务。这种架构就是因为一个系统中不同层次因为使用了完全不同的技术而需要使用分布式的情况。
ENode 1.0 - 框架的物理部署思路的更多相关文章
- enode框架step by step之框架的物理部署思路
enode框架step by step之框架的物理部署思路 enode框架系列step by step文章系列索引: enode框架step by step之开篇 enode框架step by s ...
- ENode 1.0 - 消息队列的设计思路
开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架内部的整体实现思路,用到了staged event-driven architec ...
- ENode 1.0 - 框架的总体目标
开源地址:https://github.com/tangxuehua/enode 本文想介绍一下enode框架要实现的目标以及部分实现分析思路剖析.总体来说enode框架是一个基于cqrs架构和消息驱 ...
- ENode 2.0
ENode 2.0 - 介绍一下关于ENode中对Command的调度设计 摘要: CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢? ...
- ENode 1.0 - Command Service设计思路
开源地址:https://github.com/tangxuehua/enode 上一篇文章,介绍了enode框架的物理部署思路.本文我们再简单分析一下Command Service的API设计: C ...
- ENode 2.0 - 第一个真实案例剖析-一个简易论坛(Forum)
前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.目前这个论坛在UI上是使用了 ...
- ENode 2.0 - 整体架构介绍
前言 今天是个开心的日子,又是周末,可以轻轻松松的写写文章了.去年,我写了ENode 1.0版本,那时我也写了一个分析系列.经过了大半年的时间,我对第一个版本做了很多架构上的改进,最重要的就是让ENo ...
- ENode 1.0 - Staged Event-Driven Architecture思想的运用
开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架的command service api设计思路.本文介绍一下enode框架对St ...
- ENode 1.0 - 整体架构介绍
前言 今天是个开心的日子,又是周末,可以安心轻松的写写文章了.经过了大概3年的DDD理论积累,以及去年年初的第一个版本的event sourcing框架的开发以及项目实践经验,再通过今年上半年利用业余 ...
随机推荐
- 图解VMware内存机制
在写<VMware内存机制初探>之后,原本是计划写一篇<VMware内存机制再探>的,讲一讲VMware内存机制中的另外几个重要内容,比如透明内存共享(TPS, Transpa ...
- PHP中$_SERVER的详细参数
$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关. $_SERVER['argv'] #传递给该脚本的参数. $_SERVER['argc'] ...
- Android数据库安全解决方案,使用SQLCipher进行加解密
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952409 我们都知道,Android系统内置了SQLite数据库,并且提供了一 ...
- jQuery基础_2
属性:attr: 属性 , 元素.attr("属性名");获取属性attr("attr","value"): 设置属性attr({value ...
- 使用zabbix邮件发送报表
简介 首先我们来看下图片的url (右击screens中随便一张图片,选复制图片地址) http://zabbix.xxx.com/chart2.php?graphid=524&screeni ...
- isee - 创建项目 - 1
1.在本地web目录下创建一个新项目 D:\web> composer create-project laravel/laravel isee --prefer-dist 2.在vhosts.c ...
- C# 实现 任意多边形切割折线算法
1. 内容简介 本文旨在解决任意多边形切割折线,获取切割之后的折线集合. 本文实现的算法内容包括:判断两条线段是否相交,如若相交,获取交点集合.对线上的点集,按斜率方向排序.判断点是否在多边形内 ...
- 字符串流stringstream(头文件sstream)
今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...
- berkeley db中 dirty read的实现
dirty reader怎样 不被writor block住? 如数据库支持dirty read, 则 所有打开的dbhandle都配置 DB_READ_UNCOMMITTED; 在线程拿到 writ ...
- Core Audio(一)
Core Audio APIs core audio apis是vista之后引入的,不使用与之前的windows版本:core audio apis提供访问endpoint devices,比如耳机 ...