zoukankan      html  css  js  c++  java
  • 分布式系统

    分布式系统

    使用多台服务器,为同一种互联网应用提供服务。

    分布式系统会采用很多请求分拣和分发的做法,尽快的让更多的服务器来出来用户的请求,

    还要尽量想办法减少分发的层次数,以便让请求能尽快的得到处理。

    当一个程序在一个电脑上运行,变成了又无数个电脑上同时协同运行,在开发、运维上都会带来很大的差别。

    并发模型(多线程、异步)

    在如何同时处理多个请求的问题上,业界有2个典型的方案。一种是多线程,一种是异步。

    多线程下,我们常常要加很多数据的锁,而这些锁又反过来可能导致线程的死锁。

    异步回调基于非阻塞的I/O操作(网络和文件),这样我们就不用在调用读写函数的时候“卡”在那一句函数调用,而是立刻返回“有无数据”的结果。

     缓冲技术

    最典型的WEB应用缓冲系统是Memcache。

    如何让数据缓存分不到不同的机器上。最简单的思路是所谓读写分离,也就是缓存每次写,都写到多个缓冲进程上记录,而读则可以随机读任何一个进程。在业务数据有明显的读写不平衡差距上,效果是非常好的。

    硬件故障率

    所谓分布式系统,肯定就不是只有一台服务器。假设一台服务器的平均故障时间是1%,那么当你有100台服务器的时候,那就几乎总有一台是在故障的。虽然这个比方不一定很准确,但是,当你的系统所涉及的硬件越来越多,硬件的故障也会从偶然事件变成一个必然事件。一般我们在写功能代码的时候,是不会考虑到硬件故障的时候应该怎么办的。而如果在编写分布式系统的时候,就一定需要面对这个问题了。否则,很可能只有一台服务器出故障,整个数百台服务器的集群都工作不正常了。

    软件服务内容更新

    现在都流行用敏捷开发模式中的“迭代”,来表示一个服务不断的更新程序,满足新的需求,修正BUG。如果我们仅仅管理一台服务器,那么更新这一台服务器上的程序,是非常简单的:只要把软件包拷贝过去,然后修改下配置就好。但是如果你要对成百上千的服务器去做同样的操作,就不可能每台服务器登录上去处理。

    服务器端的程序批量安装部署工具,是每个分布式系统开发者都需要的。然而,我们的安装工作除了拷贝二进制文件和配置文件外,还会有很多其他的操作。比如打开防火墙、建立共享内存文件、修改数据库表结构、改写一些数据文件等等……甚至有一些还要在服务器上安装新的软件。

    <<愿你被这世界温柔以待...>>
  • 相关阅读:
    LinkedBlockingQueue
    PriorityBlockingQueue
    js阻止事件冒泡
    java map常用的4种遍历方法
    JAVA jar 和 war 包的区别
    jquery 操作大全
    Java 使用new Thread和线程池的区别
    原生XMLHttpRequest
    socket 和 webscoket 的区别
    GET和POST请求的区别如下
  • 原文地址:https://www.cnblogs.com/NotePad-chen/p/7428344.html
Copyright © 2011-2022 走看看