• ZooKeeper 和 CAP 理论及一致性原则(转载)

    一、CAP 理论概述

    CAP 理论告诉我们,一个分布式系统不可能同时满足以下三种

    • 一致性(C:Consistency)
    • 可用性(A:Available)
    • 分区容错性(P:Partition Tolerance)

    这三个基本需求,最多只能同时满足其中的两项,因为 P 是必须的,因此往往选择就在 CP 或者 AP 中

    20191210194105.png

  • dubbo

    Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

  • Protocol

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

  • 分布式系统记录

    文章收集问题:怎样设计高并发系统? 相关书籍大型网站技术架构-核心原理与案例分析 分布式ID uuid mysql自增长机制 mysql批量取id twitter-snowflake redis原子自增
  • 零碎知识点记录

    操作系统linux 进程通信方式管道管道(pipe): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系的进程间使用。进程的血缘关系通常指父子进程关系。 有名管道(named pipe): 有名管道也是半双工的通信方式,但是它允许...
  • 数据结构

    定义 是相互之间存在一种或多种特定关系的数据元素的集合。 数据之间不是相互独立的,他们之间有某种特定的关系,这种数据元素之间的关系,称为“结构”结构=关系+实体 另一种定义:按照逻辑关系组织起来的一批数据, 按一定的存储方法把它存储在计...
  • 线上问题定位

    线上 java 进程问题cpu 占用过高1. 使用 top 查出 cpu 占用高的进程1top -c 2. 使用 top 找出占用 cpu 过高的线程1top -c -H -p pid 3. 使用 jstack 获取进程堆栈信息1jstack p...
  • 缓存

    网站访问特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。

    网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务

    网站性能优化第一定律:优先考虑使用缓存优化性能。

  • java 多线程

    并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。

    多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的浪费,而让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”手段。

    除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而TPS值与程序的并发能力又有非常密切的关系。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然就会越高;反之,线程之间频繁阻塞甚至死锁,将会大大降低程序的并发能力。

  • jvm 类加载机制

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。

    虚拟机把描述类的数据加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

    与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。例如,如果编写一个面向接口的应用程序,可以等到运行时再指定其实际的实现类;用户可以通过Java预定义的和自定义类加载器,让一个本地的应用程序可以在运行时从网络或其他地方加载一个二进制流作为程序代码的一部分,这种组装应用程序的方式目前已广泛应用于Java程序之中。