详解TCP/UDP

什么是TCP?TCP是面向连接的、可靠的、基于字节流的传输层通信协议。面向连接:发送端和接收端建立一个连接通道,为了维护连接的可靠性,通过一定的数据结构来维护双方的交互状态。 可靠性:传输过程中无重复,无丢失,无错误。无论网络链路出现了怎样变化,TCP都可以保证一个报文一定到达接收端。 字节流:发送的时候发的是一个流,没头没尾。所以无论消息有多大都可以进行传输,并且消息是[有序的],通过序列号保证报文的有序性和正确性。TCP首部结构TCP数据封装在一个IP数据报中:TCP.
分类: 其他 发布时间: 11-18 08:07 阅读次数: 0

项目架构

单体架构:所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。优点:①开发简单,集中式管理②基本不会重复开发③功能都在本.
分类: 其他 发布时间: 11-18 08:06 阅读次数: 0

详解RPC框架核心原理

RPC概念:RPC(Remote Procedure Call):远程过程调用。服务调用者可以像调用本地接口一样调用远程的服务提供者,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节,而不需要关心底层通信细节和调用过程。RPC 是一种技术思想而非一种规范或协议,目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。.
分类: 其他 发布时间: 11-18 08:05 阅读次数: 0

浅谈Zookeeper

基本概念zookeeper是经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能,高可用,且具有严格顺序访问控制能力的分布式协调存储服务。Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。特点设计目标①高性能将数据存储在内存中,直接服务于客户端的所有非事务.
分类: 其他 发布时间: 11-18 08:04 阅读次数: 0

redis集群(二)

redis单实例的缺点:(1)写并发:Redis单实例读写分离可以解决读操作的负载均衡,但对于写操作,仍然是全部落在了master节点上面,在海量数据高并发场景,一个节点写数据容易出现瓶颈,造成master节点的压力上升。(2)海量数据的存储压力:单实例Redis本质上只有一台Master作为存储,如果面对海量数据的存储,一台Redis的服务器就应付不过来了,而且数据量太大意味着持久化成本高,严重时可能会阻塞服务器,造成服务请求成功率下降,降低服务的稳定性。针对以上的问题,Redis集群
分类: 其他 发布时间: 11-18 08:03 阅读次数: 0

redis线程模型(三)

速度根据官方的 benchmark,通常来说,在一台普通硬件配置的 Linux 机器上跑单个 Redis 实例,处理简单命令(时间复杂度 O(N) 或者 O(log(N))),QPS 可以达到 8w+速度快的原因完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。 数据结构简单,对数据操作也简单,如哈希表、跳表都有很高的性能。 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑同步情况下的锁问题 使用I/O多路复用模型..
分类: 其他 发布时间: 11-18 08:03 阅读次数: 0

redis过期策略和内存淘汰策略(四)

过期策略我们在使用 redis 时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,redis 是如何判断是否过期,以及根据什么策略来进行删除的。Redis采用的是定期删除 + 懒惰删除策略。过期策略常用的有以下三种:定时删除含义:在设置 key 的过期时间的同时,为该 key 创建一个定时器,让定时器在 key 的过期时间来临时,对 key 进行删除 优点:保证内存被尽快释放 缺点:若过期 key 很多,删除这些 key 会占用很多的.
分类: 其他 发布时间: 11-18 08:03 阅读次数: 0

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级(五)

一、缓存雪崩:1、什么是缓存雪崩:如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果运维马上又重启数据库,马上又会有新的流量把数据库打死。这就是缓存雪崩。2、问题分析:造成缓存雪崩的关键在于同一时间的大规模的key失效,为什么会出现这个问题,主要有两种可能:第一种是Redis宕机,第二种可能就是采用了相同的过期时间。搞清楚原因之后,那么有什么解决方案呢?3、解决方案:(1)事
分类: 其他 发布时间: 11-18 08:03 阅读次数: 0

Redis缓存和数据库的一致性(六)

一:读缓存缓存+数据库读写的模式,就是 -——读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。原因有二:(1)如果是一个数据库写多读少的业务场景求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。(2)如果你写入数据库的值,并不是直接写入缓存的,而是要经过一系列复杂的计算再写入缓存。那么,每次写入数据库后,都再次计算写入缓存的值,无疑是浪费性能的。显然,删除缓存更为适合。所以采用lazy思想,用到的时候再去查。出现分歧..
分类: 其他 发布时间: 11-18 08:02 阅读次数: 0

RocketMQ基础(一)

架构RocketMQ架构上主要分为四部分,如上图所示:NameServer:NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker的注册信息并保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理:每个nameSever将保存有关经纪人的整个路由信息和用于客户端查询的信息。Broker向Nam.
分类: 其他 发布时间: 11-18 08:02 阅读次数: 0

RocketMQ的消息存储(二)

RocketMq的消息存储介质RocketMQ采用文件存储机制,即是选择磁盘文件来存储消息。消息刷盘至所部署虚拟机/物理机的文件系统来做持久化(刷盘一般可以分为异步刷盘和同步刷盘两种模式)。如何保证消息的存储和发送的性能①消息存储-顺序写RocketMQ的消息用顺序写,保证了消息存储的速度。磁盘如果使用得当,磁盘的速度完全可以匹配上网络 的数据传输速度。目前的高性能磁盘,顺序写速度可以达到600MB/s, 超过了一般网卡的传输速度。但是磁盘随机写的速度只有大概100KB/s,和顺序写的.
分类: 其他 发布时间: 11-18 08:01 阅读次数: 0

RocketMQ(三)

RocketMQ如何保证不丢失数据我们将消息流程分为如下三大部分,每一部分都有可能会丢失数据。生产阶段:Producer通过网络将消息发送给Broker,这个发送可能会发生丢失,比如网络延迟不可达等。 存储阶段:Broker肯定是先把消息放到内存的,然后根据刷盘策略持久化到硬盘中,刚收到Producer的消息,再内存中了,但是异常宕机了,导致消息丢失。 消费阶段:消费失败了其实也是消息丢失的一种变体吧。Producer生产阶段①采取send()同步发消息。 有三种send方法,同步发.
分类: 其他 发布时间: 11-18 08:01 阅读次数: 0

Java多线程编程基础(原子性,可见性和有序性)

文章引用:1https://www.jianshu.com/p/cf57726e77f22https://blog.csdn.net/eff666/article/details/66473088当前文章可以结合下面链接一起了解一下:https://blog.csdn.net/u013412772/article/details/80107643在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。一、原子性即一个操作或者多个操作,要么全..
分类: 其他 发布时间: 11-18 08:00 阅读次数: 0

Mysql主从复制,高可用

参考文档:Mysql集群常见方案_一点一滴g的博客-CSDN博客_mysql集群方案mysql5.7集群方案对比_laogouhuli的博客-CSDN博客_mysql集群方案对比1 单机 =》集群随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:容量问题,难以扩容,考虑数据库拆分、分库分表 读写压力,QPS 过大,特别是分析类需求会影响到业务事务,考虑多机集群、主从复制 高可用性不足,易宕机,考虑故障转移、MHA/MGR/Orchestrator
分类: 其他 发布时间: 11-18 07:59 阅读次数: 0

redis内存淘汰算法,LRU,LFU

Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略;而后者是通过定期删除+惰性删除两者结合的方式淘汰内存过期键的。这里参照官方文档的解释重新叙述一遍过期删除策略:当某个key被设置了过期时间之后,客户端每次对该key的访问(读写)都会事先检测该key是否过期,如果过期就直接删除;但有一些键只访问一次,因此需要主动删除,默认情况下redis每秒检测10次,检测的对象是所有设置了过期时间的键集合,每次从这个集合中随机检
分类: 其他 发布时间: 11-18 07:58 阅读次数: 0

Mybatis和jdbc的执行流程

JDBC(Java Data Base Connectivity, Java 数据库连接)是一种用于执行 SQL 语句的 Java API,是 Java 应用连接各种关系型数据库的基本的接口。可以为多种关系数据库提供统一访问。JDBC执行过程一:引包在执行JDBC前,首先我们要导入MySQL jar包创建文件夹lib,并导入该包二:加载驱动Class.forName(“com.mysql.jdbc.Driver”);三:建立连接connection = DriverManage
分类: 其他 发布时间: 11-18 07:58 阅读次数: 0

ProtoThreads的抢占式调度问题

Protothreads是Adam Dunkels实现的用户级轻量级线程库。它的主页在: http://dunkels.com/adam/pt/index.html。它使用特殊技巧的switch语句模拟了用户线程的调度原语。可以使用的用户线程数不受限制。由于简易,Protothreads线程不支持局部变量,需要避开用户的switch语句,以及不支持抢占式调度。这里设想通过添加计数器的方法,模拟时间片,时间片到时之后,强制释放处理器,模拟通常的抢占式调度。pt.h中, struct pt增加两个变量:
分类: 其他 发布时间: 11-18 07:58 阅读次数: 0

C++的模板(三):向模板传递模板

类模板是一种不完全的类型。它需要绑定参数,才能转化成实际的类型。这个过程叫做实例化。模板的参数必须是常数,或者类型。那么如果需要向模板传递模板该怎么办呢?STL采用了rebind的办法。这是摘自STL allocator内存分配器的代码: template<typename _Tp> class new_allocator { public: typedef size_t size_type; typedef ptrdiff_t d
分类: 其他 发布时间: 11-18 07:58 阅读次数: 0

strtok的一种实现

C语言是一种高效的语言。它允许程序员写出跟系统库一样高效的代码。会自己写标准库中大部分库函数是C程序员的基本功。这里介绍一个strtok代码的实现。偶尔不想使用系统时,可以试试这个代码。它没有调用别的函数。char *str_tok(char *s, char *delims, char **save){ int found; int ra; char *p; char *q; char *t; if (
分类: 其他 发布时间: 11-18 07:57 阅读次数: 0

C++的模板(四):编译问题

现在,换一种方式来看hanoi塔问题。这次用模板。来看这段代码:#include <iostream>using namespace std;template <int n, int a, int b, int c>class Tower {public: Tower() { Tower<n-1, a, c, b> t1; cout<<"move plate"<<n<<" fr
分类: 其他 发布时间: 11-18 07:57 阅读次数: 0