- 博客(580)
- 资源 (22)
- 收藏
- 关注

原创 博文总目录
【博文目录】 【>>>架构<<<】 【工程下载>&am
2017-06-19 07:50:59
11411
5
原创 Go源码阅读——mstats.go
【博文目录>>>】 【项目地址>>>】Go内存统计Go提供了运行进内存统计的方法,其实现在runtime/mstats.go文件中。go内存统计的作用有:Go内存实时监控内存dump时,统计内存相关信息Go GC时,统计GC相关的信息应用调试时分析内存分配等Go中的内存统计信息结构有两个,分别是mstats和MemStats,详细信息如下:...
2020-04-27 08:36:21
1029
原创 Go源码阅读——map.go
【博文目录>>>】 【项目地址>>>】Go Map实现map.go文件包含Go的映射类型的实现。映射只是一个哈希表。数据被安排在一系列存储桶中。每个存储桶最多包含8个键/元素对。哈希的低位用于选择存储桶。每个存储桶包含每个哈希的一些高阶位,以区分单个存储桶中的条目。如果有8个以上的键散列到存储桶中,则我们会链接到其他存储桶。当散列表增加时,我们将分配...
2020-04-23 08:26:49
946
原创 go源码阅读——malloc.go
【博文目录>>>】 【项目地址>>>】内存分配器golang内存分配最初是基于tcmalloc的,但是有很大的不同。tcmalloc文章:参见:http://goog-perftools.sourceforge.net/doc/tcmalloc.html翻译:https://blog.youkuaiyun.com/DERRANTCM/article/details...
2020-04-13 08:07:32
2075
翻译 TCMalloc:线程缓存Malloc
TCMalloc:线程缓存Malloc本文翻译了TCMalloc : Thread-Caching Malloc最重要的部分,TCMalloc是go语言内存分配的基石,go内存分配置就是从TCMalloc演化而来。其余部分内容可参见原文。动机内存分配速度快。TCMalloc比我测试过的glibc 2.3 malloc(可称为ptmalloc2的独立库)和其他malloc更快。ptmalloc...
2020-04-06 13:57:51
642
原创 go源码阅读——chan.go
【博文目录>>>】 【项目地址>>>】chan.go是go语言通道实现,通道结构的定义,接收和发送的操作都此文件中实现。通道的结构hchan是通道表示的基本结构,其内容表示如下:一些特殊情况当dataqsiz=0时:说明这是一个无缓冲对列当dataqsiz>0时,说明是一个缓冲对列type hchan struct { qcoun...
2020-04-05 17:32:16
1198
原创 go源码阅读——value.go
【博文目录>>>】【项目地址>>>】基本内容value文件主要提供值的一些调用方法,value所需要的值在在type.go文件中定义package reflectimport ( "math" "runtime" "unsafe")const ptrSize = 4 << (^uintptr(0) >> 63) /...
2020-04-01 08:41:03
1880
原创 go源码阅读——type.go
基本结构图reflect包基础类型是Type,其主要实现是rtype,在rtype下会有基于种类型的实现,主要结构图。基本常量数据类型常量type Kind uintconst ( Invalid Kind = iota Bool Int Int8 Int16 Int32 Int64 Uint Uint8 Uint16 Uint32 Uint64 Uintp...
2020-03-26 08:17:30
1598
翻译 事件源模式
【博文目录>>>】事件源模式使用仅追加存储来记录描述在域中对数据执行的操作的完整事件序列,而不是仅存储当前状态,以便可以使用该存储来实现域对象。这种模式可以通过避免同步数据模型和业务域的要求,简化复杂领域中的任务;提高性能、可伸缩性和响应性;为事务性数据提供一致性;并维护完整的审计追踪和历史记录,以支持采取补偿措施。背景与问题大多数应用程序使用数据,并且典型的方法是应用...
2020-03-21 10:48:24
1077
翻译 命令和查询责任隔离(CQRS)模式
【博文目录>>>】命令和查询责任隔离(CQRS)模式使用单独的接口将读取数据的操作与更新数据的操作隔离开来。这种模式可以最大限度地提高性能、可伸缩性和安全性;通过更高的灵活性支持系统随时间的发展;并防止更新命令在域级别造成合并冲突。背景与问题在传统的数据管理系统中,命令(对数据的更新)和查询(对数据的请求)都针对单个数据存储库中的同一组实体执行。这些实体可以是关系数据库...
2020-03-14 08:33:00
614
翻译 计算资源整合模式
【博文目录>>>】计算资源整合模式将多个任务或操作整合到一个计算单元中。这种模式可以提高计算资源利用率,并减少与在云托管应用程序中执行计算处理相关的成本和管理开销。背景与问题云应用程序经常实现各种操作。在某些解决方案中,最初可能会遵循关注点分离的设计原则,并将这些操作划分为单独托管和部署的离散计算单元(例如,作为Microsoft Azure Cloud Service...
2020-03-08 09:21:18
1054
翻译 竞争消费者模式
【博文目录>>>】竞争消费者模式使多个并发使用者能够处理在同一消息通道上接收的消息。这种模式使系统能够同时处理多条消息,以优化吞吐量,提高可伸缩性和可用性,并平衡工作负载。背景与问题运行在云中的应用程序可能会处理大量请求。与其同步处理每个请求,不如让应用程序通过消息系统将它们传递给另一个服务(消费者(服务)异步处理它们的服务。此策略有助于确保在处理请求时应用程序中的业务...
2020-03-07 07:39:32
533
翻译 补偿交易模式
【博文目录>>>】补偿交易模式如果一个或多个步骤失败,则撤消由一系列执行的工作的步骤组成,这些步骤一起定义最终一致的操作。遵循最终一致性模型的操作通常可在实现复杂业务流程和工作流的云托管应用程序中找到。背景与问题运行在云中的应用程序经常修改数据。这些数据可以分布在各种地理位置的各种数据源上。为了在这样的分布式环境中避免争用和提高性能,应用程序不应该试图提供强大的事务一致...
2020-02-29 09:02:09
1110
翻译 缓存旁路模式
【博文目录>>>】缓存旁路模式根据需要从数据存储区将数据加载到缓存中。这种模式可以提高性能,并有助于保持缓存中的数据与基础数据存储中的数据之间的一致性。语境与问题应用程序使用缓存优化对数据存储中保存的信息的重复访问。然而,期望缓存的数据始终与数据存储中的数据完全一致是不切实际的。应用程序应该实现一种策略,以帮助确保缓存中的数据尽可能地更新,但也可以检测和处理缓存中的数据...
2020-02-09 09:59:27
2478
翻译 云设计模式:云应用程序的规范体系结构指南
本指南包含24种设计模式和10个相关的指导主题,通过展示如何将每一项应用于云应用程序体系结构的全局图来阐明应用模式的好处。它还讨论了每种模式的好处和注意事项。大多数模式代码样例或者显示如何使用MicrosoftAzure的特性实现模式的片段。然而,本指南中描述的大多数主题与各种分布式系统同样相关,无论是在Azure上还是在其他云平台上。设计模式以下设计模式在云托管应用程序中非常有用。每个模式都...
2020-02-08 10:29:12
1090
原创 Java——Retry重试机制详解
Java——Retry重试机制详解@[TOC](Java——Retry重试机制详解)[【博文目录>>>】](http://blog.youkuaiyun.com/derrantcm/article/details/73456550)[【项目源码>>>】](https://github.com/Wang-Jun-Chao/spring-all/tree/master/boot...
2019-05-20 16:40:52
2670
4
转载 深入浅出Event Sourcing和CQRS
深入浅出Event Sourcing和CQRSEvent Sourcing也叫事件溯源,是这些年另一个越来越流行的概念,是大神Martin Fowler提出的一种架构模式。简单来说,它有几个特点:整个系统以事件为驱动,所有业务都由事件驱动来完成。事件是一等公民,系统的数据以事件为基础,事件要保存在某种存储上。业务数据只是一些由事件产生的视图,不一定要保存到数据库中。什么是Event ...
2019-01-18 10:49:14
2089
原创 Java新一代垃圾回收器——ZGC
Java新一代垃圾回收器——ZGC在JDK 11当中,加入了实验性质的ZGC。它的回收耗时平均不到2毫秒。它是一款低停顿高并发的收集器。ZGC几乎在所有地方并发执行的,除了初始标记的是STW的。所以停顿时间几乎就耗费在初始标记上,这部分的实际是非常少的。那么其他阶段是怎么做到可以并发执行的呢?ZGC主要新增了两项技术,一个是着色指针Colored Pointer,另一个是读屏障Load B...
2018-11-20 08:35:10
2166
原创 【31-Redis分布式锁进化史】
【博文总目录&gt;&gt;&gt;】Redis分布式锁进化史近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都...
2018-11-19 09:33:09
665
2
原创 MAC Pro 装Ubuntu 18 虚拟机字太小的调节方法
macpro 装Ubuntu18 虚拟机 字太小的调节方法用的macpro安装了ubuntu15虚拟机。结果因为分辨率太高,ubuntu里字体图标都很小。最后发现了一个可调节的方法:1.点击ubuntu的setting2.点击弹出窗口的dispalys3.弹出的Displays窗口中,选择分辨率和放大倍数,保存。...
2018-07-21 06:40:34
3814
原创 消息对队的使用和常用消息对列对比
【博文总目录>>>】一、消息队列使用的四种场景介绍消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。...
2018-03-11 10:29:07
1824
原创 使用cglib在内存中动态生成类
【博文总目录>>>】|【项目源码>>>】CGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。本示例展示了如何使用cglib动态生成类。package wjc.cglib;import net.sf.cglib.beans.BeanGenerator;import net.sf....
2018-02-22 09:55:05
3956
1
原创 使用javaassist在内存中动态生成类
【博文总目录>>>】|【项目源码>>>】Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态”AOP”框架。下面我们来学习如何使用javaass...
2018-02-22 09:08:23
1935
原创 最简RPC框架实现
【博文总目录>>>】|【项目源码>>>】RPC概述RPC(Remote Proceduce Call 远程过程调用) 一般用来实现部署在不同机器上的系统之间的方法调用,使程序能够像访问本地系统资源一样,通过网络传输过去访问远端系统资源。RPC 调用过程 1、Client 客户端调用方法实现,负责发起RPC调用。2、ClientStub/SereverStub 可以看作
2018-02-04 10:56:01
1699
转载 第八章JAVA CAS原理深度分析
【博文总目录>>>】【Java 7 并发编程实战手册目录>>>】java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包。可见CAS的重要性。CASCAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。本文先从CAS
2018-01-21 19:52:53
911
转载 【第13章】【TCP粘包/拆包问题和Netty的解决方案】
【博文总目录>>>】工程下载【1>>>】|【2>>>】什么是TCP协议?TCP(Transmission Control Protocol传输控制协议)是Internet协议组的主要协议之一。起源于初始的网络实现,补充了IP协议。因此通常称为TCP/IP协议。TCP在运行在IP通信网络的应用程序之间提供稳定的、有序的和错误检查的8字节流分发功能。—— from wiki
2018-01-20 22:48:30
878
原创 跳跃表Skip List的原理和实现(Java)
【博文总目录>>>】|【代码下载>>>】为什么要有跳跃表我们在实际开发中经常会有在一堆数据中查找一个指定数据的需求,而常用的支持高效查找算法的实现方式有以下几种:有序数组。这种方式的存储结构,优点是支持数据的随机访问,并且可以采用二分查找算法降低查找操作的复杂度。缺点同样很明显,插入和删除数据时,为了保持元素的有序性,需要进行大量的移动数据的操作。二叉查找树。如果需要一个既支持高效
2018-01-15 13:09:54
10419
4
原创 【30-Redis设计与实现-整数集合】
【博文总目录>>>】|【工程下载>>>】整数集合( intset )是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。整数集合的实现整数集合( intset )是Redis 用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t 、int32_t 或者int64_t 的整数值,并且保证集合
2018-01-09 08:05:53
735
原创 【29-Redis设计与实现-跳跃表】
【博文总目录>>>】|【工程下载>>>】跳跃表( skiplist )是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)(的复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,井且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替
2018-01-08 08:11:46
1302
原创 【28-Redis设计与实现-字典】
【博文总目录>>>】|【工程下载>>>】字典,又称为符号表( symbol table )、关联数组( associative array )或映射( map ),是一种用于保存键值对( key-value pair )的抽象数据结构。在字典中,一个键( key )可以和一个值( value )进行关联(或者说将键映射为值),这些关联的键和值就称为键值对。字典中的每个键都是独一无二的,程
2018-01-07 09:14:30
884
原创 【27-Redis设计与实现-链表】
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis 使用的C 语言并没有内置这种数据结构,所以Redis 构建了自己的链表实现。链表在Redis 中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时, Redis 就会
2017-12-27 07:40:35
861
原创 【26-Redis设计与实现-简单动态字符串】
Redis 没有直接使用C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串( simple dynamic string, SDS )的抽象类型,并将SDS 用作Redis 的默认字符串表示。在Redis 里面, C 字符串只会作为字符串字面量( s回ng literal )用在一些无须对字符串值进行修改的地方,比如打印日志。
2017-12-26 08:10:51
935
原创 【25-Reids内存优化】
edis2.2版本及以后,存储集合数据的时候会采用内存压缩技术,以使用更少的内存存储更多的数据。如Hashes,Lists,Sets和Sorted Sets,当这些集合中的所有数都小于一个给定的元素,并且集合中元素数量小于某个值时,存储的数据会被以一种非常节省内存的方式进行编码,使用这种编码理论上至少会节省10倍以上内存(平均节省5倍以上内存)。
2017-12-23 08:10:38
1048
原创 【24-Redis发布订阅】
订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者)。而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。这种发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑。
2017-12-22 08:10:33
942
原创 【23-将redis当做使用LRU算法的缓存来使用】
当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据是件很方便的事情。这个行为在开发者社区非常有名,因为它是流行的memcached系统的默认行为。LRU是Redis唯一支持的回收方法。本页面包括一些常规话题,Redis的maxmemory指令用于将可用内存限制成一个固定大小,还包括了Redis使用的LRU算法,这个实际上只是近似的LRU。
2017-12-21 07:15:14
929
原创 【22-Redis管道】
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。
2017-12-20 07:27:59
786
原创 【21-Redis:LRU算法使用】
当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据是件很方便的事情。这个行为在开发者社区非常有名,因为它是流行的memcached系统的默认行为。
2017-12-19 08:18:31
945
原创 【20-Redis协议说明】
Redis协议在以下几点之间做出了折衷:简单的实现快速地被计算机解析简单得可以能被人工解析网络层Redis在TCP端口6379上监听到来的连接,客户端连接到来时,Redis服务器为此创建一个TCP连接。在客户端与服务器端之间传输的每个Redis命令或者数据都以\r\n结尾。请求Redis接收由不同参数组成的命令。一旦收到命令,将会立刻被处理,并回复给客户端。
2017-12-16 08:14:51
783
原创 【19-Redis集群规范】
Redis 集群是 Redis 的一个分布式实现,主要是为了实现以下这些目标(按在设计中的重要性排序):- 在1000个节点的时候仍能表现得很好并且可扩展性(scalability)是线性的。- 没有合并操作,这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。- 写入安全(Write safety):那些与大多数节点相连的客户端所做的写入操作,系统尝试全部都保存下来。不过公认的,还是会有
2017-12-15 07:32:30
919
原创 【18-Redis集群教程】
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令.
2017-12-14 07:48:31
776
Java CP/IP Socket编程
2012-04-13
嵌入式试卷
2011-11-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人