自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (7)
  • 收藏
  • 关注

原创 k8s基础网络Cluster Network模型

创建两个 pod进入 busybox并查看网络

2020-12-31 14:59:30 1255

原创 微服务架构下的服务发布和引用方案

服务提供者如何发布一个服务?服务消费者如何引用这个服务?具体来说,就是这个服务的接口名是什么?调用这个服务需要传递哪些参数?接口的返回值是什么类型?RESTful API首先来说说RESTful API的方式,主要被用作HTTP或者HTTPS协议的接口定义,即使在非微服务架构体系下,也被广泛采用。以开源服务化框架Motan发布RESTful API为例发布三个RESTful格式的API声明具体的服务实现如下:服务提供者这一端通过部署代码到Tomcat中,并配置Tomcat中如下的web

2020-12-30 23:32:22 1392

原创 阿里字节华为互联网大厂微服务故障处理方案

单体应用改造成微服务的一个好处是可以减少故障影响范围,故障被局限在一个微服务系统本身,而不是整个单体应用都崩溃。具体到一个微服务系统,如果出现了故障,应该如何处理呢?1 集群故障一旦代码出现bug,可能整个集群都会发生故障,不能提供对外提供服务。1.1 故障原因代码bug比如OOM突发的流量冲击,超出了系统的最大承载能力比如秒杀活动,电商系统会在零点一瞬间涌入大量流量,超出系统的最大承载能力,一下子就把整个系统给压垮了1.2 解决方案1.2.1 限流系统能够承载的流量根据集群规模的

2020-12-30 23:10:41 1279

原创 云原生容器实战(四)-Kubernetes工作负载资源之Deployment

一个 Deployment 控制器为 Pods 和 ReplicaSets 提供声明式的更新能力。你负责描述 Deployment 中的 目标状态,而 Deployment 控制器以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的 ReplicaSet,或删除现有 Deployment, 并通过新的 Deployment 收养其资源。不要管理 Deployment 所拥有的 ReplicaSet 。 如果存在下面未覆盖的使用场景,请考虑在 Kubernetes 仓

2020-12-30 17:05:52 1186

原创 云原生容器实战(三)-Kubernetes工作负载资源PodReplicaSet

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。ReplicaSet 的工作原理RepicaSet 是通过一组字段来定义的,包括一个用来识别可获得的 Pod 的集合的选择算符、一个用来标明应该维护的副本个数的数值、一个用来指定应该创建新 Pod 以满足副本个数条件时要使用的 Pod 模板等等。 每个 ReplicaSet 都通过根据需要创建和 删除 Pod 以使得副本个数达到期望值, 进而实现其存在

2020-12-30 15:02:24 1080

原创 Kubernetes集群安装及kubectl命令行大全

Kubernetes集群管理工具,它可以帮助您部署、管理和扩展Kubernetes集群中的应用程序和服务。使用kubectl,您可以创建、更新、删除Pod、Service、Deployment、ConfigMap、Secret等Kubernetes资源对象,同时也可以查看和监控这些资源对象的状态和日志,并进行应用程序调试和故障排除。除此之外,kubectl还可以帮助您在不同的Kubernetes集群和命名空间之间切换和操作,管理Kubernetes对象的标签和注释,以及管理kubectl的配置文件等操作。

2020-12-30 14:29:30 1729

原创 云原生容器实战(二)-Kubernetes调度单位Pod

目录K8S最小调度单位Pod我们不直接操作容器container一个 pod 里可包含一或多个container,共享一个 namespace(用户,网络,存储等),其中的进程之间通过 localhost 本地通信创建一个 yml 文件,并创建kubectl create -f pod_nginx.ymlkubectl get pods第一次运行状态字段为 pull,因为要先拉取 nginx 的 image,ready查看 docker 面板,已经成功拉取下来 nginx

2020-12-30 12:43:52 1308

原创 Mac解决docker kubernetes一直starting

Mac 不被很好支持人尽皆知。我点击Enable Kubernetes之后就一直在Starting找了很多博客无法解决,现在终于起来了。复盘下步骤:卸载官方 docker desktop,重装国内的docker desktop启动后,配置阿里源{ "experimental": true, "debug": true, "registry-mirrors": [ "https://xxx.mirror.aliyuncs.com" ]}查看hosts删除相关文件

2020-12-30 11:05:09 1985

原创 一文搞定Netty断开连接原理

点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!多路复用器(Selector) 接收到OP_READ事件:处理OP_READ事件: NioSocketChanne...

2020-12-29 23:37:23 2919

原创 微服务架构下请求调用失败的解决方案

0 前言相比单体架构,微服务架构下,服务调用从同一台机器内部的本地调用变成了不同机器间的远程方法调用,这就引入不确定因素:调用的执行是在服务提供者一端,即使服务消费者本身正常,服务提供者也可能由于诸如CPU、网络I/O、磁盘、内存、网卡等硬件原因导致调用失败,还可能因本身程序执行问题如GC暂停导致调用失败调用发生在两台机器间,所以要经过网络传输,而网络不可控:丢包、延迟及抖动都可能造成调用失败。所以必须要针对服务调用失败进行特殊处理。1 超时微服务化后,一次用户调用可能会被拆分成多系统间的

2020-12-29 22:46:06 3734 3

原创 阿里华为等大厂架构师如何解决空指针问题

Java的null 表示它没有引用指向或没有指针,这时操作该变量必会引发空指针异常,即NullPointerException。当线上环境发生该异常时,就会收到大量投诉!如何才能避免呢?毕竟NPE虽烦人但易定位,麻烦的是要弄清楚null含义。客户端给服务端一个null,其本意就是想给个空值,还是根本没提供值?DB字段的NULL值,是否有特殊含义?针对DB的NULL值,写SQL需要特注意啥呢?根据开发经验,NPE出现场景可归结如下场景:参数是Integer等包装类,自动拆箱时字符串比较如C

2020-12-29 21:02:45 1363 1

原创 Java8的TreeMap源码解析

突然看源码估计看不懂.不急,喝口红牛,我们先看图首先庖丁解牛,类似于如何把大象装入冰箱,分三步走:以排序二叉树的方式新增节点因为红黑树首先本身就是一个排序二叉树标记它为红色如果设为黑色,就会导致根到叶的路径上有一条路上,多一个额外的黑节点,打破性质 5,这个很难调整但设为红色节点后,可能会导致出现两个连续红色节点的冲突,那么可以通过颜色调换(color flips)和树旋转调整...

2020-12-29 20:57:09 1123

原创 一文搞定Netty写数据高性能原理

点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!1 写数据的核心问题快递场景(包裹)Netty写数据(数据)揽收到仓库write:写到一个buffer从仓库发货f...

2020-12-28 23:10:34 1220

原创 微服务调用链监控开源工具CAT

1 监控在微服务架构的地位2 为何需要调用链监控?在初期的单体应用,应用都打在一个包中,无分布式概念,监控也只需对一些埋点监控。但是微服务时代下,很多服务在各自的包,一旦出现问题,没有调用链监控就很难定位问题!3 没有应用监控可能带来的坑点线上发布了服务,怎么知道一切正常?大量报错,到底哪里产生的,谁才是根因?人工配置错误,上线前通宵排错,结婚了还得来修 bug!应用程序有性能问题,怎么尽早发现问题?数据库问题,在出问题之前能洞察吗?最后谁都查不出问题,全部甩锅网络问题~可能

2020-12-28 13:19:41 2034 1

原创 minikube快速搭建 k8s单节点环境

kubectl,类似 docker 中的 docker-cli。

2020-12-27 16:48:33 1477

原创 这样的设计太妙了!K8S 神秘架构终于揭开面纱!

Kubernetes,希腊语,意舵手。有时简写为“K8s”,其中“8”代表“K”和“s”之间的 8 个字母,是一个开源系统,支持在任何地方部署、扩缩和管理容器化应用。

2020-12-27 16:36:26 1604 1

原创 Docker Swarm模式架构

Docker Swarm模式架构Swarm 原理Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理和编排功能。可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。Docker Engine CLI和API包括了管理Swarm节点命令,比如添加、删除节点,以及在Swarm中部署和编排服务。也增加了服务栈(Stack)、服务(Service)、任务(Task)概

2020-12-27 16:06:24 1140

原创 拥抱Kubernetes,再见了SpringCloud

相信很多开发者在熟悉微服务工作后,才发现:以为用 Spring Cloud 已经成功打造了微服务架构帝国,殊不知引入了 k8s 后,却和 Cloud Native 的生态发展脱轨。从 2013 年的 Spring Boot2012年10月,Mike Youngstrom在Spring jira中创建了一个功能需求,要求在Spring框架中支持无容器Web应用程序体系结构。他建议通过main方法引导的Spring容器内配置Web容器服务。这一需求促成了2013年初开始的Spring Boot项目的开

2020-12-26 15:44:22 2270

原创 使用Netty构建高性能的网络应用程序

完善的客户端如果想拿到请求的结果同步发送完一个请求后,直接等待返回的结果。请求必须在之前请求-响应完成后 → 请求与请求之间没有任何关系性能较低,因为总耗时是所有请求响应时间总和。异步完成从左到右的转变那么在设计网络编程消息传递结构时就要设计,消息结构加个唯一 id(stream id)...

2020-12-25 22:57:31 1119 1

原创 Netty业务开发常见Bug解析

不显式初始化initialBytesToStripLengthFieldBasedFrameDecoder#initialBytesToStripChannelHandler顺序错误解码编码顺序一定要注意ChannelHandler 共享问题不该共享的共享了,并发时就有数据问题这个很容易理解,犯错了也会很严重,必须避免。该共享的不共享,每个 pipeline 自己又单独添加了,就等于重复存了该 handler 浪费内存分配ByteBuf方式错误分配器直接用ByteB

2020-12-25 22:13:36 1223 1

原创 Netty源码解析SimpleChannelInboundHandler

ChannelInboundHandlerAdapterChannelInboundHandlerAdapter直接操作byte数组。ChannelInboundHandlerAdapter 好像一无是处,毕竟他要自己处理资源的释放buf.release();如果channelRead都是同步操作,SimpleChannelInboundHandler是不错的选择,如果操作是异步的话,那他的逻辑就有点麻烦了,例如你把数据交给另外的线程处理了,还没处理就会释放了 。这里必须说明一个问题,他的回收.

2020-12-25 16:10:43 1845

原创 Netty如何实现服务的优雅关闭

1 优雅关闭的常见作用最常见的,比如业务开发中,服务突然异常,刚进来的用户请求还在,通过优雅关闭,给他们 30s 时间继续执行,以免直接报错出去。2 Netty 优雅关闭流程图修改 NioEventLoop 的 State 标志位NioEventLoop 判断 State 执行退出先不接活,后尽量干完手头的活(先关 boss 后关 worker:非百分百保证)打断点,主要看 workGroup 的关闭这里就传入了两个时间为啥两个时间呢?一个为了优雅DEFAULT_SHUTD

2020-12-24 16:26:14 2553

原创 Netty是如何断开连接的?

多路复用器(Selector) 接收到OP_READ事件:处理OP_READ事件: NioSocketChannel.NioSocketChannelUnsafe.read()接受数据判断接受的数据大小是否<0,如果是,说明是关闭,开始执行关闭:关闭channel(包含cancel多路复用器的key)清理消息:不接受新信息,fail 掉所有queue中消息触发fireChannellnactive和fireChannelUnregistered。源码关闭连接,会触发OP_RE

2020-12-24 13:36:22 1941

原创 HTTP的短连接、长连接管理

打开和保持连接影响网站和 Web 应用程序性能。在 HTTP/1.x 里有多种模型:短连接, 长连接, 和 HTTP 流水线。短连接模型HTTP 的传输协议主要依赖 TCP 提供从客户端到服务器端之间的连接。早期 HTTP 使用一个简单模型来处理这样的连接。这些连接的生命周期是短暂的:每发起一个请求时都会创建一个新的连接,并在收到应答时立即关闭。这个简单的模型对性能有先天限制:打开每个 TCP 连接都相当耗费资源。客户端和服务器端之间需要交换好多消息。当请求发起时,网络延迟和带宽都会对性能造成影响。现

2020-12-24 11:12:36 1415

原创 Netty是如何写数据的?

1 写数据的核心问题快递场景(包裹)Netty写数据(数据)揽收到仓库write:写到一个buffer从仓库发货flush:把buffer里的数据发送出去揽收到仓库并立马发货( 加急件)writeAndFlush: 写到buffer, 立马发送揽收与发货之间有个缓冲的仓库Write和Flush之间有个ChannelOutboundBuffer1.1 写炸了对方仓库爆仓时,送不了的时候,会停止送,协商等电话通知什么时候好了,再送。Netty写数据,写

2020-12-24 10:55:09 1264

原创 Netty业务代码执行流程源码解析

worker thread执行示意图Handler执行资格:实现了ChannellnboundHandler实现方法channelRead不能加注解@Skip执行流程多路复用器( Selector )接收到OP_ READ事件处理 OP_READ事件: NioSocketChannel.NioSocketChannelUnsafe.read分配一个初始1024字节的byte buffer来接受数据从 Channet接受数据到byte buffer记录实际接受数据大小, 调整下次分

2020-12-23 21:28:33 1214 1

原创 Go语言的面向对象

go语言仅支持封装,不支持继承和多态。go语言没有class,只有struct。结构的定义go 语言即使是指针,不像 C语言使用->也可一直使用.引用下去go 没有构造器,但可使用工厂函数那么这到底创建在了堆还是栈呢?不需要知道。如果返回了没人用就在栈上如果返回了有人用,就在堆,并参与到 GC。所以没必要知道,编译器自己都知道。参数前后区别参数定义在函数名前后有啥区别呢?使用区别Go都是值传递,记住了,和 Java 一样。使用指针作为方法接收者只有使用指

2020-12-23 20:19:26 1140

原创 手把手教你调试Netty接收数据流程源码

1 Netty读数据的技巧1.1 AdaptiveRecvByteBufAllocator自适应数据大小的分配器。打水时,拿多大桶去装?小了不够大了浪费所以根据自己实际装预估下次情况,从而决定下次带多大桶。AdaptiveRecvByteBufAllocator对bytebuf的猜测果断地放大谨慎地缩小( 需连续2次的判断)1.2 defaultMaxMessagesPerRead连续读。排队打水时,假设当前桶装满了,这时你会觉得可能还要打点水才够用,所以直接拿个新桶等装,

2020-12-23 19:04:59 1656

原创 手把手教你调试Netty创建连接流程源码

执行过程boss threadNioEventLoop 中的 selector轮询创建连接事件 (ОР_АССЕРT)创建 socket channel初始化 socket channel 并从 worker group 中选择一个 NioEventLoopworker thread将socket channel注册到选择的NioEventLoop的selector注册读事件(OP_ READ)到selector 上接收连接请求的处理本质是对 OP_ACCEPT 的处理,即在 Nio

2020-12-23 14:22:13 1302

原创 手把手带你调试阅读Netty启动服务流程源码

点击上方“JavaEdge”,关注公众号设为“星标”,好文章不错过!我们自己的线程,如果写在main 方法,那就是main 线程在创建 NioEventLoopGroup(创建一组N...

2020-12-22 21:21:21 1081

原创 手把手教你调试Netty启动服务流程源码

我们自己的线程,如果写在main 方法,那就是main 线程在创建 NioEventLoopGroup(创建一组NioEventLoop) 的过程中就创建了 selector这里因为我们当前线程其实是 main 线程,所以为 false创建 ServerSocketChannel初始化 server socket channel给 server socket channel 从 boss group 选择一个 NioEventLoopboss thread将 serverS.

2020-12-22 20:31:49 1299 3

原创 深入Netty源码解析内存优化技巧

1 降低对象大小能用基本类型就不用包装类懂得都懂。应该定义成类变量的不要定义为实例变量一个类 =》 一个类变量一个实例 =》一个实例变量一个类 =》 多个实例实例越多,浪费越多当然 netty 会结合这两点!2 预估分配的内存对已可预知固定size的HashMap避免扩容提前计算好初始size或者直接使用com.google.common.collect.Maps#newHashMapWithExpectedSize根据接受到的数据动态调整(guess) 下个要分配

2020-12-22 13:52:19 4109 4

原创 和Netty学习Java锁的使用

1 锁的对象和范围缩小粒度2 锁的对象本身大小减少空间占用Atomic long V.S long前者是个对象,包含对象头(object header)以保存hashcode、lock 等信息,64 位系统下占16字节,64位系统下:volatile long= 8 bytesAtomicLong = 8 bytes (volatile long) + 16bytes (对象头) + 8 bytes (引用) = 32 bytes至少节约24字节!所以 Atomic* obj

2020-12-21 23:23:28 1209

原创 锁的分类

对竞争的态度乐观锁(java.util.concurrent 包中的原子类)悲观锁( Synchronized)等待锁的人是否公平而言公平锁new ReentrantLock (true)非公平锁new ReentrantLock ()是否可以共享共享锁与独享锁: ReadWriteLock ,其读锁是共享锁,其写锁是独享锁...

2020-12-21 22:05:58 1099

原创 Netty如何实现 keepalive和idle监测

1 为什么需要keepalive ?类比如下场景2 怎么设计keepalive以TCP keepalive为例TCP keepalive 核心参数:# sysctl -algrep tcp_ keepalivenet.ipv4.tcp_ keepalive_ time = 7200 问题出现概率小,没有必要频繁net.ipv4.tcp_ keepalive_ intvl= 75net.ipv4.tcp_ keepalive_ probes= 9 判断需谨慎,不能武断当启用( 默认

2020-12-21 21:50:24 2421

原创 计算机网络之应用层

1 域名,域名系统DNS计算机的用户只是间接而不是直接使用域名系统。因特网采用层次结构的命名树作为主机的名字,并使用分布式的域名系统 DNS。名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。因特网的域名结构因特网采用了层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。域名的结构由标号序列组成,各标号之间用点隔开:… . 三级域名 . 二级域名 . 顶级域名各标号分别代

2020-12-21 20:13:20 1191 1

原创 如何修正Netty编解码的缺陷

为什么会存在二次编解码把解决半包粘包问题的常用三种解码器叫一次解码器ByteToMessageDecoder即从io.netty.buffer. ByteBuf ( 原始数据流) =》 io.netty.buffer .ByteBuf ( 用户数据)但是在实际业务项目中,除可选的的压缩解压缩,还需一层解码,因为一次解码的结果是字节,需要和项目中所使用的对象做转化,方便使用,这层解码器可以称为“二次解码器”,相应的对应编码器是为了将Java对象转化成字节流方便存储或传输。于是有了二次解码器:Me

2020-12-21 18:41:14 1267

原创 Redis真的是单线程吗?

Redis,全名REmote DIctionary Server,开源的高性能的KV内存数据库,支持数据持久化。开源的支持多种数据结构的基于键值的存储服务系统,高性能、功能丰富。提供了Java , C/C++ , C# , PHP , JavaScript ,Perl, Object-C , Python , Ruby , Erlang等客户端从2010年3月15日起, Redis的开发工作由VMware主持从2013年5月开始, Redis的开发由Pivotal赞助1 高性能底层使用AN

2020-12-21 18:01:44 1507 1

原创 由于不知道Java线程池的bug,某程序员叕被祭天

我们会使用各种池化技术缓存 创建性能开销较大的 对象,比如线程池、连接池、内存池。它们的原理都是预先创建一些对象入池,使用时直接取出,用完归还以复用,还会通过策略调整池中缓存对象的数量,实现动态伸缩性。由于线程的创建比较昂贵,短平快的任务一般考虑使用线程池处理,而非直接创建线程。手动声明线程池JDK的Executors工具类定义了很多便捷的方法可以快速创建线程池。但是阿里有话说:我们来看他说的弊端案例真的这么严重吗?newFixedThreadPool 可能 OOM我们写一段测试代码,来

2020-12-21 15:01:04 22097 34

原创 阿里Sentinel核心源码解析-责任链模式最佳实践(下)

NodeSelectorSlot首先,链中第一个处理节点是 NodeSelectorSlot。// key 是 context name, value 是 DefaultNode 实例private volatile Map<String, DefaultNode> map = new HashMap<String, DefaultNode>(10);@Overridepublic void entry(Context context, ResourceWrapper r

2020-12-20 16:36:59 1482

Spring基础讲义-java 入门必备

Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-java 入门必备Spring基础讲义-j

2022-11-05

spring-boot-actuator-web-api.pdf

Spring Boot Actuator Api

2021-10-02

EvgenyMandrikov_Marc_Hoffmann_Java_Coverage_mechanics.pdf

jacoco 官方原理解析文档,由领导者亲自执笔编写!

2020-04-03

人工智能蔡自兴课件 PPT

人工智能及其应用第四版,最新版本课程使用课件,适合期末复习

2019-01-06

Spartk 电影PPT资料

Spartk 电影的PPT资料,这是一个很好的视频教程哦,由于原文件太大,想要可以联系我哦

2019-01-06

南邮微机原理课件

南邮微机原理课件.....................................................................

2018-01-08

南邮Windows编程课件

南京邮电大学Windows编程课件1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

2017-11-26

微机原理课件-南邮

南邮的微机原理课件

2017-11-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除