当前位置: 首页 > news >正文

网站如何做分布式(集群)的大纲

下面是我准备在BOF中抛砖引玉用到的砖:

网站如何做分布式(集群)的大纲

何时要用分布式

  • 单台服务器无法承受压力。
  • 需要实现发生错误时候,自动切换
  • 学习或者测试分布式技术

应用分布式的场景


一、提供多个对外的接口,按照一定规则,分派不同请求由不同接口来处理。
这时候需要考虑:
  • 如何实现负载均衡
    • 在哪个层次实现转移负载
    • 负载的均衡如何实现
  • 如何实现故障转移
    • 如何监控故障
    • 如何切换服务

二、把一个功能拆分成多个功能,不同功能分布部署到不同服务器上

  • 对外功能的拆分
    • http://news.sina.com.cn/ http://sports.sina.com.cn/ http://mobile.sina.com.cn/
    • http://www.microsoft.com/china/ http://www.microsoft.com/downloads/
    • SOA
  • n层架构,其中的一些层分布到不同服务器上
    • WEB + DB 模式

网站请求中的分布式

按照请求流程,我们可以在以下环节按照一定规则,把用户的请求分流到不同服务器上:

  • Web Client Level
    • 例子:QQ 设置中你可以选择登陆的服务器IP
  • DNS Based Selection
    • 优点:
    • 缺点:
      • 不能区分服务器的差异,也不能反映服务器的当前运行状态。
      • DNS 的刷新需要时间,无法及时故障切换。
  • TCP balancing proxies
    • 硬件
    • 软件
  • HTTP-aware routers
  • URL重定向

网站应用中的分布式

  • 代理服务器实现请求的分离
    • Squid是Linux下一个缓存Internet数据的代理服务器软件
  • 拆分网站对外功能
    • 不同域名前、后缀
    • URL 重写
  • SOA
    • 每个Service 分布到一台服务器上
  • n 层架构
    • 缓存分布式部署
      • 文件Cache
      • 内存Cache (memcached )
        • http://www.danga.com/memcached/
        • https://sourceforge.net/projects/memcacheddotnet/
    • DB分布式集群部署
      • 故障转移
      • 发布订阅
      • 分布式分区视图
    • 应用服务器(比如定时发送邮件通知的服务)
    • 相关技术:
      • 企业服务
      • .net Remoting
      • WCF
      • Web Service

如何判断一个应用是否支持分布式

如果发现某一部分应用需要做分布式了,就可以按照以下思路来考虑如何改造:

从应用所用数据看是否支持分布式

  • 多份并存数据(一个数据存在多份)最大多长时间同步一次是可接受的。
    • 内存缓存的数据跟数据库的数据(页面级缓存和业务逻辑缓存)
    • 静态文件跟数据库
    • 查询数据库跟业务变更数据库
  • 数据按照一定规则拆分(一个数据只存在一份)对业务是否有影响
    • 过去每年的数据迁移到一个对应历史库中。
    • 专用的图片服务器 http://pics.ebaystatic.com/

此处可分析:QQ的在线用户数据,会是如何处理的呢?

从应用逻辑过程看是否支持分布式

  • 是否可以并行执行这个逻辑过程
  • 这个逻辑过程是否可以拆分成几个松耦合的过程

微软技术支持的5种分布式

夏桅的这篇博客中的图表就可以很详细的对比这5种分布式:

Windows的第五种群集方案 - CCS

相关文章:

  • iOS7下有时MKMapView中的字特别大的问题的解决
  • 有感Atlas - 优点、缺点、学习
  • NSInvocationOperation的cancelAllOperations不会取消正在运行的operation
  • 微软.NET俱乐部Tech-ED2006追踪报道!
  • MAC下SVN客户端Versions和Cornerstone的比较
  • 在ubuntu下用wine玩魔兽世界
  • 小孩不能吃黑枣
  • 9月23日培训日记
  • 治瘊子的小秘方
  • 前几天所有吐槽12306验证码的都应该站出来向12306道歉
  • 9月24日培训日记
  • 9月25日培训日记
  • 贷款和理财的电话
  • 星光灿烂之夜-MVP SuperStar
  • 这些事,我不作,别人也会作
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Docker: 容器互访的三种方式
  • ES6 学习笔记(一)let,const和解构赋值
  • HTML-表单
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript实现分页效果
  • 半理解系列--Promise的进化史
  • 包装类对象
  • 记一次删除Git记录中的大文件的过程
  • 力扣(LeetCode)56
  • 设计模式 开闭原则
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 新书推荐|Windows黑客编程技术详解
  • 在Unity中实现一个简单的消息管理器
  • 自制字幕遮挡器
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 带你开发类似Pokemon Go的AR游戏
  • #pragma multi_compile #pragma shader_feature
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (定时器/计数器)中断系统(详解与使用)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Pointcut 使用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [.net] 如何在mail的加入正文显示图片