互斥锁:共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将该资源加锁,使用完后会将其解锁,如果在使用过程中有其他线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会被唤醒,如果被阻塞的资源不止一个,那么它们都会被唤醒,但是获得资源使用权的是第一个被唤醒的线程,其它线程又陷入沉睡.
读写锁:它拥有读状态加锁、写状态加锁、不加锁这三种状态。
只有一个线程可以占有写状态的锁,但可以有多个线程同时占有读状态锁,这也是它可以实现高并发的原因。当其处于写状态锁下,任何想要尝试获得锁的线程都会被阻塞,直到写状态锁被释放;如果是处于读状态锁下,允许其它线程获得它的读状态锁,但是不允许获得它的写状态锁,直到所有线程的读状态锁被释放;为了避免想要尝试写操作的线程一直得不到写状态锁,当读写锁感知到有线程想要获得写状态锁时,便会阻塞其后所有想要获得读状态锁的线程。所以读写锁非常适合资源的读操作远多于写操作的情况。
自旋锁:自旋锁是一种特殊的互斥锁,当资源被枷锁后,其他线程想要再次加锁,此时该线程不会被阻塞睡眠而是陷入循环等待状态(不能在做其它事情),循环检查资源持有者是否已经释放了资源,这样做的好处是减少了线程从睡眠到唤醒的资源消耗,但会一直占用CPU的资源。适用于资源的锁被持有的时间短,而又不希望在线程的唤醒上花费太多资源的情况。
递归锁:同一个线程可以多次获得该资源锁,别的线程必须等该线程释放所有次数的锁才可以获得。
一、LAN——局域网
局域网(英文:Local Area Network 缩写LAN),是指有限区域(如办公室或楼层)内的多台计算机通过共享的传输介质互连,所组成的封闭网络。局域网一般由网络硬件,网络传输介质和网络软件所组成。
局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。共享的互连介质通常是一个电缆系统(如双绞线、同轴电缆、光纤等),也可以是红外信号、无线电等无线传输传输介质。依据拓扑结构的不同,局域网又分为以太网、令牌环网、无线局域网等类型。
二、MAN——城域网
城域网(Metropolitan Area Network)是在一个城市范围内所建立的计算机通信网,简称MAN,属宽带局域网。由于采用了有源交换元件的局域网技术,网中传输时延较小,它的传输媒介主要采用光缆,传输速率在100兆比特/秒以上。MAN的一个重要用途是用作骨干网,通过它将位于同一城市内不同地点的主机、数据库以及LAN等互相联接起来,这与WAN的作用有相似之处,但两者在实现方法与性能上有很大差别。基于一种大型的LAN,通常使用与LAN相似的技术。
三、WAN——广域网
广域网WAN(Wide Area Network)也叫远程网RCN,它的作用物理范围范围大,一般可以从几十公里至几万公里。一个国家或国际间建立的网络都是广域网。在广域网内,用于通信的传输装置和传输介质可由电信部门提供。
覆盖的范围比局域网(LAN)和城域网(MAN)都广。广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的局域网或计算机系统互连起来,达到资源共享的目的。
广域网是由许多交换机组成的,交换机之间采用点到点线路连接,几乎所有的点到点通信方式都可以用来建立广域网,包括租用线路、光纤、微波、卫星信道。而广域网交换机实际上就是一台计算机,有处理器和输入/输出设备进行数据包的收发处理。
ISO的OSI模型
OSI七层网络模型 |
TCP/IP四层概念模型 |
对应网络协议 |
应用层(Application) |
应用层 |
HTTP、TFTP, FTP, NFS, WAIS、SMTP |
表示层(Presentation) |
Telnet, Rlogin, SNMP, Gopher |
|
会话层(Session) |
SMTP, DNS |
|
传输层(Transport) |
传输层 |
TCP, UDP |
网络层(Network) |
网络层 |
IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层(Data Link) |
数据链路层 |
FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层(Physical) |
IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
BIO、NIO、AIO
https://blog.csdn.net/ty497122758/article/details/78979302
netty:http://ifeve.com/netty5-user-guide/
1. java运行环境JVM,java byte code的运行环境,hotspot应该是使用最广泛的的一个虚拟机产品。
HOTSPOT JVM的内存布局,Young/Tenured/Perm 新生代、老年代、持久代。分别由不同的GC方式
2.Java并发编程
线程池 ThreadPoolExceutor、ScheduledThreadPoolExceutor
ReentrantLock、synchronized、volatile、
Atomics 原子操作
wait、notify、notifyAll
CountDownLatch、CyclicBarrier
Exchanger 用于两个线程直接进行数据的交换
Future、FutureTask
并发容器:CopyOnWrite和ConCurrent开头的几个容器
3.动态代理与静态代理、反射
4.网络通信:netty、mina
RPC(Remote Procedure Call)
灰度发布
服务治理:管理服务和查看服务
数据垂直/水平拆分
分布式事务规范 XA
两阶段提交
大型网站一致性的基础理论---CAP/BASE
CAP(Consistency 一致性、Availability 可用性、Partition-Tolerance 分区容忍性)
BASE(Basically Available 基本可用,允许分区失败,Soft state 软状态、Eventually consistent 最终一致 保证最终数据的状态一致的)
Paxos协议(前提是不存在拜占庭将军问题)
从工程上来说,如果能够避免分布式是我的引入,那么还是避免为好。如果实在要引入,可以考虑最终一致的方法,不必要追求强一致
多机Sequence问题与处理、外键约束、跨库jion、跨库查询(排序、函数处理max、sum、count..)、求平均值、非排序分页、排序后分页
一致性哈希算法
数据源 org.vanadies.ddal.DataSource、org.vanadies.ddal.GroupDataSource、AtomDataSource
读写分离 主备库 数据平滑迁移
JMS(Java Message Serivce) 是 javaee中的一个关于消息的规范, hornetq、activemq 是实现
最基本的特点:采用消息中间件可以进行应用之间的解耦及操作的异步
还需考虑:顺序保证、扩展性、可靠性、业务操作、与信息发送一致性以及 多集群订阅者等
JMS Queue模型:消息被一个应用处理后,其他应用就收不到这个消息了,应用共同消费了所有的消息
JMS Topic模型(Pub/Sub方式):所有应用都能接到到每个消息
消息订阅者订阅消息的方式:持久订阅、非持久订阅
软负载中心最基础的职责:聚合地址信息、生命周期感知
软负载中心的结构:服务端(负责感知提供服务的机器是否在线,聚合提供者的机器信息,并且负责吧数据传给使用数据的应用)与客户端(有两个角色,作为服务提供者:吧服务提供者提供服务的具体信息主体传给服务端;作为服务使用者:向服务端告知自己所需要的数据并负责去更新数据,本地化数据缓存、通过本地的数据缓存,使得每次去请求服务列表都是一个本地操作。)
集中配置管理中心,可以从数据是否持久以及是否需要聚合两个维度进行分类, 持久指的是数据本身与联发布者的生命周期无关的,典型的是持久订阅关系、路由规则、数据访问层的分库分表规则和数据库配置等;非持久是发布则生命周期有关联的,例如服务地址列表。集中配置管理中心存储的基本都是各个应用集群、中间件产品的关键管理配置信息,已经一些配置开关,可进行运行时的控制,通过改变配置的内容进而影响应用的行为。
CDN(Content Delivery Network) 内容分发网络。作用:把用户需要的内容分发到离用户近的地方,这样可以使用户能够就近获取所需的内容。CDN是一种网络缓存技术,一方面可以节省整个广域网的带宽消耗,另一方面可以提升用户的访问速度。
大型网站的存储支持:
分布式文件系统 GFS.
NoSQL
缓存系统: redis Memcache
搜索系统:爬虫问题、倒排索引、查询预处理、相关度计算
数据计算支撑:离线计算 MapReduce(Hadoop) 在线计算(Storm)
发布系统:分发应用、启动校验、灰度发布(主要是针对新应用在用户体验方面完全感知不到的更新)
应用监控系统:数据监视维度、数据记录方式、数据采集方式、展现于告警
依赖管理系统
多机房问题分析
系统容量规划
内部私有云