zoukankan      html  css  js  c++  java
  • 02 高性能

    存储高性能

    关系数据库

      读写分离,基本原理是将数据库读写操作分散的不同的节点,基本的实现方式:

      1) 数据库服务器搭建主从集群,一主一从,或一主多从.

      2) 数据库主机负责读写操作,从机只负责读操作。

      3)数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。(困难,同步需要时间)

      4)业务服务器将写操作发给数据库主机,将读操作发给数据库从机。

      分表分库

      既然DB 有了划分, 那访问时,程序如何能够正确的访问到对应划分的区域, 这时就需要封装中间件, 业务将标准的 SQL 提交给 (数据访问层), 

      比如读写分离的DB, 由这个中间的数据访问层来实现, 如果是写的 SQL 就访问主数据库,而select 就访问从数据库。 

    NoSQL (key-value)

      关系型数据库在以下方面有劣势:

      关系数据库无法存储数据结构, 只能按照 table 格式存储, Redis 可以。

      关系数据库的 schema 扩展不方便。NoSQL key-value, MongoDB

      关系数据库在大数据场景下 I/O 较高, 列式数据库, 解决I/O问题,比如 HBase

      关系数据库全文搜索功能比较弱, Elasticsearch 代表.

      NoSQL 牺牲了 ACID, 而弥补了以上的不足. 文档数据库(存储数据格式如 JSON)

    缓存

      绝大部分在线业务都是读多写少, 比如发一条微博,可能一条insert语句,但是成千上万个人看select. 缓存的基本原理是将可能重复使用的数据放到内存中,一次生成,多次使用, 避免每次都访问存储系统(DB + IO)

      缓存穿透: 缓存没有发挥作用,业务不能从缓存获得信息: 原因:

        1) 存储数据不存在。这种情况发生概率不大. 一般根据业务的需要情况,肯定有一些是比较被业务依赖的数据。

        2)缓存数据生成耗费大量时间和资源。

      缓存雪崩: 缓存失败后, 导致系统性能急剧下降, 这时我们需要有缓存的监控,或者是定时的维护缓存(将重要信息放到缓存里)。

     计算高性能

    1) 尽量提升单服务器的性能, 将单服务器的性能发挥到极致。

      服务器采取网络编程模型. (主要考虑 I/O, 进程内存) JVM 等.

    2)如果单服务器无法支撑性能,设计服务器集群方案。

      高性能集群的复杂度主要体现在任务分配这部分, 需要设计合理的任务分配策略,将计算任务分配到多台服务器上。任务分配器现在比较流行的叫法是" 负载均衡器", 常见的负载均衡器分为:

      DNS负载均衡: 地理级别的均衡,比如北方的用户访问北京的机房, 南方的用户访问深圳的机房. (DNS 会告诉访问者服务器的IP, 控制权在DNS域名商手里)

      硬件负载均衡: 比如 F5, 性能强大,价格贵,只有“土豪”公司才用的起。稳定性高。  

      软件负载均衡:比如 Nginx, 部署简单, 便宜, 灵活, 性能一般。

      一般, DNS 负责地区之间负载均衡, 硬件负责集群之间负载均衡,软件负责机器之间负载均衡。

      Nginx, 实际上软负载均衡有很多种方式来分配任务, 比如平均分的轮询,加权,性能最优, 负载最低优先,实际上我还是喜欢负载最低,你可以根据当前系统的“瓶颈”,比如是web系统,可以看http的连接数找到最低使用server.

      

      

  • 相关阅读:
    C#中char[]与string之间的转换
    Java文件操作之文件追加 Chars
    冒泡排序法的改进 Chars
    选择排序 Chars
    编译原理 Chars
    Apk反编译 Chars
    VC中常用的方法 Chars
    Node.Js入门级《培训》
    新概念系列之《Part2 Lesson 24 It could be worse》
    《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(三)
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12255874.html
Copyright © 2011-2022 走看看