爱上开源
文章平均质量分 82
inthirties
程序员紫龙,喜欢编程,热爱编程的老年程序员
展开
-
Docker实战-使用HAProxy实现4层的负载均衡
上一篇文章《Docker实战-使用Nginx实现4层的负载均衡》给大家实战使用docker,部署Nginx来实现4层负载均衡。今天这个文章咱们来来看看另一个负载均衡利器HAProxy在Docker里如何进行部署,来实现4层负载均衡。HAProxy是一款开源的、高性能的、基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件,借助HAProxy可以快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案。...原创 2022-08-31 12:50:17 · 2066 阅读 · 0 评论 -
springcloud mybatis踩过的坑
java是进行应用开发非常好的一门语言,springcloud是java语言实现微服务的最好的框架和微服务化的实践,很多中小厂都是使用springcloud来实现微服务的体系, 而mybatis作为这个解决方案中object mapping组件也是非常成熟的一种选择, 今天这个文章就来拆一拆,在mybatis和springcloud/springboot集成中遇到过的一些坑。...原创 2022-08-31 11:24:41 · 333 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(十)
函数是各种编程语言里组成编程逻辑的主要部分;特别在Go语言中,Go语言削弱了面向对象编程的一些特性,比如构造函数,多态,抽象等,在函数式编程方面进行了类似于javascript和python等语言的借鉴,由此在咱们的第四章函数章节里,已经就细化了十个章节来进行各个方面的介绍。今天的这个文章,接着一文中对defer和recover的介绍,进一步深入的通过代码样例来学习函数。Recover的顺序。...原创 2022-08-31 09:41:44 · 158 阅读 · 0 评论 -
Docker实战-使用NGINX实现4层的负载均衡
我们俗称的3层,4层,7层都是相对于网络结构而言的, 表示是在网络7层架构的哪个层次实现的负载均衡;四层负载均衡:工作在传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。今天我们这个文章就给大家实战一下,通过docker使用nginx来实现4层的负载均衡。......原创 2022-08-30 15:38:23 · 1769 阅读 · 0 评论 -
springcloud项目里application.yml不加载的坑
在springboot项目里,这是非常常见的, 在springcloud的微服务项目,每个微服务也是使用spingboot作为基础脚手架来搭建项目的, 有些项目使用了application.yml或者bootstrap.yml,发现配置项无效。在springboot里经常使用application.properties类似的properties作为配置文件,通过配置文件进行springboot项目的配置。这里的问题,是由于没有引入支持bootstrap.yml的包进来, 可以在项目里引入。......原创 2022-08-30 14:56:42 · 2134 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(九)
在前面的介绍函数的文章时候,就在java和go对异常处理的地方提到过这个defer函数,defer是go语言里进行延迟调用的一种机制,defer后面的函数不会马上就执行调用,只有在当前调用defer函数的函数完全执行完毕后才会执行defer函数,基于这样的调用机制及原理,defer函数通常都用来进行资源的释放。例如}TestDefer Func如上述代码,通过defer执行的函数fmt.Println并不会马上执行调用,而是在执行defer函数的函数执行完毕后再进行执行;...原创 2022-08-30 13:29:30 · 211 阅读 · 0 评论 -
SpringCloud FeignClient的坑(httpClient连接池的使用)
在头条上已经发布过不少的文章了,根据文章的浏览量来看,go语言的市场需求明显是小于java的需求量的,最近也开始发布一下以前使用java和springcloud,springboot里遇到的一些避坑文章;个人感觉go在云原生这个场景里将会不断的被发展,在云原生环境下,没有任何一个语言可能和其匹敌,RUST也许会有一定的竞争压力。作为service mesh未来的云环境架构, springcloud的原有项目会慢慢的转换;先说了些感悟, 今天要分享的是OpenFeign里的一个小坑。......原创 2022-08-29 14:40:04 · 1114 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(八)
作为一个数据类型的对象,函数当然可以放到切片里面,map里面,可以赋值给一个变量,可以作为参数传递,也可以作为函数值进行返回。如上段代码,代码定义了函数名为adder的函数, 函数没有定义传入参数,但是定义了返回值,返回值是func(int) int, 即返回值是一个函数, 而且该函数定义一个传入参数,参数数据类型是整数型, 该函数还定义了一个返回值,返回值类型也是int,整数型类型;上面的代码可以可以改写成如下代码。下面我们通过一个代码样例,来看看作为函数返回值的函数对象,如何使用;......原创 2022-08-29 13:59:16 · 393 阅读 · 0 评论 -
SpringBoot里全局 非expcetion异常处理 非WebFlex
在SpringBoot中,常用的异常处理有两种,一种是BasicErrorController,另一种是@ControllerAdvice,BasicErrorController用于处理非Controller抛出的异常,而@ControllerAdvice用于处理Controller抛出的异常,对于非Controller抛出的异常它是不会管的。BasicErrorController进行了配置,为此在继承BasicErrorController后也应当对继承类进行配置。SpringBoot异常处理机制。.原创 2022-08-26 10:44:50 · 287 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(七)
接着定义一个toTrim的函数,该函数实现对传入字符串进行去除空格处理, 最后定义一个toTrimPrefix的函数,将传入字符串前AAA字符串进行出除。在PrintFibonacci函数里, 把接收到的整数类型n,作为参数传递到fibonacciWorker这个传入的函数类型,并执行fibonacciWorker函数,返回整数型类型的数组,然后把此类函数类型作为参数传入, 在外部调用时, 把具体的实现作为参数对这个方法进行调用,就可以达到实现和接口的隔离了。第一个参数是整数类型,传入调用的n值,...原创 2022-08-26 10:19:50 · 171 阅读 · 0 评论 -
golang中的三个点 ‘...‘ 的用法
它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。第二个用法是slice可以被打散进行传递。’ 其实是go的一种语法糖。原创 2022-08-25 11:27:14 · 1942 阅读 · 0 评论 -
Spring循环依赖原理,及如何解决?
此时返回A中,A此时能拿到B的对象顺利完成自己的初始化阶段2、3,最终A也完成了初始化,进去了一级缓存singletonObjects中,而且更加幸运的是,由于B拿到了A的对象引用,所以B现在hold住的A对象完成了初始化。isSingletonCurrentlyInCreation() :判断当前单例bean是否正在创建中,也就是没有初始化完成 (比如A的构造器依赖了B对象所以得先去创建B对象,或者在A的populateBean过程中依赖了B对象,得先去创建B对象,这时的A就是处于创建中的状态)。原创 2022-08-25 11:01:19 · 808 阅读 · 0 评论 -
K8s API快速入门
上一篇文章《Docker Restful API快速入门》介绍了有关Docker API的快速入门,今天这个文章给大家介绍一下K8s API的入门。 下载K8s的API, k8s的API是OPENAPI的标准,可以从github.com/gohutool/docker.ui项目进行下载, 文件名k8s.swagger.json打开Postman,点击File-》Import 如图这里就已经成功的导入了K8s的API至Postman里, 接下来,我们测试一个响应的API, 查看Pods执行出现错误原创 2022-08-25 10:33:11 · 802 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(六)
匿名函数和闭包Go语言支持匿名函数,在前面就讲到过,在Go语言里,函数更像是定义的一个函数类型的对象;在Go语言里,匿名函数更复合这个特性;匿名函数可以在需要使用函数时再定义函数,匿名函数没有函数名只有函数体,这样GO语言的匿名函数作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递,这与C语言的回调函数比较类似,不同的是,Go语言支持随时在代码里定义匿名函数。 下面来具体介绍一下匿名函数的定义及使用。原创 2022-08-25 09:43:14 · 202 阅读 · 0 评论 -
使用SpringBoot里Endpoint中遇到的一个小坑
笔者一直普及有关Go语言和容器Docker方面的技术,这两方面的技术都是入门和深入云原生技术的底层技术;作为云原生上层应用中java还是需求量最高的,在java的云技术里springcloud和springboot是java中顶级流量的两个框架,程序员紫龙在java微服务架构也折腾过很多年,今天给大家分享的就是有关springboot里有关Endponint使用的一个技术坑。原创 2022-08-24 11:18:09 · 812 阅读 · 0 评论 -
Docker Restful API快速入门
Docker Engine提供了Restful API供Docker Cli调用, 和普通的Web API一样, Docker提供的API也可以直接通过URL进行调用。DockerUI就是通过Docker Engine提供的API,实现和Docker Daemon的交互,并完成对Docker节点的管理功能。今天这个文章就介绍一下,我们如何来获得Docker Restful API并进行API的调用。原创 2022-08-24 10:11:55 · 1779 阅读 · 1 评论 -
爱上开源之golang入门至实战第四章函数(Func)(五)
变长函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。如上个例子,我们就定义了一个Average的变长参数的函数,Average函数参数定义为...int,表示处理一个int类型的变长参数,函数的实现,是变量所有的参数,然后累加计算平均值。这里的代码,也是一个变长参数的函数的使用例子, golang里内置的append函数也是一个变长参数的函数, 参考builtin.go代码。在上面的例子里,定义了Says变长参数的函数;原创 2022-08-24 09:27:48 · 172 阅读 · 0 评论 -
如何开启Docker的TCP通信端口
Docker Engine提供RestFul API, Docker Cli通过Restful API和Docker Daemon进行交互,默认情况下,docker cli通过unix通道文件和Daemon进程进行交互,也可以通过docker cli里的--host参数指定,需要通信的Docker远端机器进行交互, --host参数指定,需要进行连接的Docker daemon的监听端口。默认情况下,Docker的socket tcp端口是没有打开的,只提供本地的unix的通道文件的通信方式。原创 2022-08-23 12:53:05 · 3213 阅读 · 0 评论 -
HPC入门教程(OpenPBS )
集群(Cluster)是一个网络计算和服务的集合体,是一组计算机。集群的各计算机之间通过网络而相互联系、协同工作,为应用和服务提供一套并行资源。集群向用户提供单一系统映像,集群内部结构对用户是透明的。集群一般可分为三类:高性能计算集群(High Performance Computing Cluster)、高可用性集群(High Availability Cluster)和负载均衡集群(Load Balancing Cluster)。原创 2022-08-23 12:06:12 · 1971 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(四)
在Go语言里没有这个Exception Stack,对于JAVA语言诞生而言,其就是关注与服务器端的应用业务, 而Go的诞生是来作为拥抱云原生的服务组件,可能exceptoin的损耗反馈到业务系统里可以忽略不计,但是对于面向低层的服务,这些损耗不能不计。可以看到这个列子就能够充分看到带命名的返回参数,所带来的语言之美,不仅仅是省略了一个返回值的定义的过程,这里的返回值和参数一样的性质,值传递,还是引用传递,Go适合于较低层的服务的实现,恰恰就是这些特性非常符合低层服务的编程习惯。上面的例子,可以改写为。原创 2022-08-23 11:35:38 · 191 阅读 · 0 评论 -
可视化Docker管理工具-DockerUI
Docker主机管理数据卷管理,镜像管理,容器管理,构建管理,仓库配置管理,网络配置管理Docker Swarm集群管理集群概要信息,节点管理,Service管理,任务管理,密码管理,配置管理任务编排Docker任务编排,Docker Swarm任务编排。原创 2022-08-22 16:38:29 · 2622 阅读 · 3 评论 -
爱上开源之golang入门至实战第四章函数(Func)(三)
上方定义了一个exchange的函数,函数的传入参数是a,b两个int类型的数字, 函数交换两个参数的数值,这个函数的运行结果就可以充分的演示出按值传递的效果, 参数的参数都是副本, 所以执行结束以后,原有的a,b两个原值在函数体里都是在对副本进行的操作,函数体执行结束,a,b继续使用原值,所以执行完exchange以后,a,b值不会发生变化。调用都是更高效的调用,从基本上来说,至少传递指针的方式,只是一个32位或者64位值的复制,而值传递的方式,就是要对传递的对象进行值拷贝。品味1: 如何完成值交换的?原创 2022-08-22 11:41:49 · 157 阅读 · 0 评论 -
10步帮你完成专利网上申请,每一步成功的背后都是汗水
专利是对每个创新者的创新思路最大的保护,申请专利是我们保护自己的知识产权的基本手段,只有申请了专利,我们才有权利,在发生侵权的情况下,在一定的程度上弥补侵权带来的损失,特别是在知识更新和技术变化比较快的行业领域,知识产权,专利申请的方面的保护就更加的重要了。今天要聊的就是,专利申报的申报文书的过程和方法。去年,我们公司的专利是委托专利公司申请,申请过程中被不断地忽悠,临时加价,等各种无语操作以后,就自己进行了专利的申请。原创 2022-08-19 15:31:24 · 377 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章函数(Func)(二)
继承,抽象和多态是面向对象语言的三大特征,但是在Go语言的函数这个范畴内,函数就完全不具有这样的特性。在Go语言里,没有抽象函数这样的概念,没有abstract这个关键字,也没有明显的继承这样的概念,也不支持重载 (overload);即使如此,为什么还是这么喜欢, 下面就来看看笔者根据多年对java和go的使用过程中,对这个问题的理解继承,抽象和多态是面向对象语言的三大特征,但是在Go语言的函数这个范畴内,函数就完全不具有这样的特性。...原创 2022-08-15 11:17:16 · 335 阅读 · 0 评论 -
爱上开源之DockerUI-xterm.js实现Web控制台
在DockerUI里也使用了xterm.js这个项目来实现了WEB方式的模拟控制台终端。原创 2022-08-14 21:49:10 · 2928 阅读 · 1 评论 -
程序员为讨好老婆,用go写了如下程序,细思极恐
导出请求包,在postman里进行模拟,并进行验证请求的模拟选择Copy AS CURL(bash)在linux里执行;(如果没有linux环境,可以在上一步中选择Copy AS CURL(cmd))执行成功后,导入到Postman里, 直接把CURL的命令导入可以成功进行访问, 胜利就在前方, 要做到程序化,必须要加入最后一步,要模拟认证,对上面的请求包进行分析。发现其中决定认证的几个头信息如下这里的信息经过测试,只要是和cookie里的保存一致,即可。......原创 2022-08-13 16:29:23 · 1450 阅读 · 1 评论 -
爱上开源之DockerUI-自建Docker镜像仓库实战
这篇文章,记录了有关使用Docker Registry进行私有Docker仓库的安装实战过程; 并进行了Pull和push的测试。 在下一个文章里,我们会介绍另一个使用非常广泛的另一个Registry产品Nexus, Nexus不仅支持全面的Docker Registry V1.0和V2.0接口标准;还拥有简单而方便的操作界面,和更强大的管理支持。 敬请各位朋友下一期关注。...原创 2022-08-08 14:52:47 · 650 阅读 · 0 评论 -
爱上开源之dockerUI强大docker管理工具,没有之一
但是通过对各产品的使用和比较,docker不会落寞,而且在中小规模的应用体上将重新主导天下,k8s很多概念都是借鉴docker的,而且k8s主要做编排,和dockerswarm是相争的,容器嘛,redhat的libpod,只能呵呵两声,谁用谁知道该怎么去骂他,指的是单独使用,没有使用k8s编排,其他的容器产品呢,基本都是在开源的containerd的基础上实现的。打开容器后,可以查看容器的具体信息,和相关容器的操作。镜像的详情信息,让镜像的所有信息一览无余,如图里所示,是镜像的构建历史。...原创 2022-07-25 18:38:25 · 3304 阅读 · 1 评论 -
爱上开源之golang入门至实战第四章-数组 隐藏的性能陷阱
数组是具有相同唯一类型的一组已编号且长度固定的数据序列(所有的数据项目都是相同的数据类型);元素的数据类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组长度必须是一个常量表达式,且必须是一个非负整数。 相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易于扩展。 数组长度也是数组类型的一部分,不同的长度,不同的数据类型都属于不同的数组类型; 数组元素可以通过索原创 2022-07-11 16:42:59 · 177 阅读 · 0 评论 -
爱上开源之golang入门至实战第四章-数据基本类型
爱上开源之golang入门至实战第四章-数据基本类型在Go编程语言中,数据类型用于声明函数和变量。Go 语言中有丰富的数据类型,用来表示基本类型的整型、浮点型、布尔型、字符串等,Go 语言的基本类型和其他语言大同小异,在基本类型的汽车上,Go语言还有其特有的数组、切片、结构体、函数、 map、通道( channel ),自定义类型等。 切片类型有着指针性,但比指针更为安全,很多高级语言都配有切片进行安全; Channel通道类型是天生为多并发而设计的;这些数据类型在Go的高性能编程里都特别的常用;4.1.1原创 2022-07-11 10:53:28 · 178 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-内存逃逸
如上面我们介绍的,内存的分配可以在堆上也可以在栈上,当然内存在栈上分配更快,并且栈上的内存不需要GC,入栈出栈直接回收。通常情况下,函数的内部中不对外开放的局部变量,并只作用于当前函数中的变量,它的内存是分配在栈中。执行函数前会执行进栈操作,函数结束后会出栈,同时释放内存。 但是由于某种原因,原本是该分配到栈上的变量,跑到了堆上,这就导致了内存逃逸。 常见的 go、java 语言都会有内存逃逸的情况,我们常用的函数以及局部变量通常是分配到栈上的,但是一旦出现内存逃逸,变量就会分配到堆上。逃逸后果栈是高地址到原创 2022-07-08 14:41:32 · 259 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章goroutine分析
爱上开源之golang入门至实战第三章 - goroutine分析Pprof中的Goroutine是对当前时间点的goroutine(协程)数据的采样,我们经常使用pprof对可能发送goroutine(协程)泄漏的可能点进行分析;goroutine(协程)泄漏是goroutine启动之后没有退出导致goroutine的数量不会减少,或者是在实际应用中goroutine占用了很长时间才退出导致在一段时间内goroutine的数量急剧上升; 虽然goroutine(协程)相对于线程的开销来说更加的轻量级,但是原创 2022-07-06 11:04:56 · 614 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-内存Alloc分析
Allocs也是关注与内存方面的数据采样,而且由于Allocs的采样数据和Heap的采样数据大致上都是一样的。所以很多golang的开发人员非常容易忽略这个Allocs的数据采样 上面就是Allocs的数据采样的文本格式的内容; 和Heap的对照一下,确实发现是一致的; 我们可以详细查看pprof输出allocs的源代码 line 546 行函数的实现。可以发现Heap和Allocs两者都是使用同一个函数进行输出的;在同一个时间点的采样上,输出的数据就是一致的。虽然Heap和Allocs两者的数据样本一致原创 2022-07-05 10:51:23 · 945 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析-Heap
Heap Memory Heap: A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.添加gc这个parameter到get的url里, 可以在采样之前强制执行一次GC后,再进行采样;来之pprof.go(net/http/pprof.go)源码 Heap的手工埋点如果是Run over Once的工具包,原创 2022-07-04 11:14:57 · 401 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析-分析数据
我们使用上面的两种方法采集到运行的golang程序的性能数据样本后,下面就可以用我们第一步,安装的pprof工具来查看性能数据了, pprof可视化分析工具,主要是对样本数据文件进行解析,提供解析后的性能数据给我查看。现在我们通过一个实例来详细的介绍一下性能分析的过程。 通过pprof的来查看笔者的一款基于fasthttp服务的性能数据由于是一个非http底层的服务,fasthttp本身有兼容pprof的实现方式,但是笔者简单的还是通过另其一个单独的http服务来实现;仅仅只是为了演示而已;在真实的场景里,原创 2022-07-01 12:23:15 · 555 阅读 · 0 评论 -
爱上开源之boot4go-dockerui-剧透篇
前面分别开源分享了两个产品系列今天在这里给大家剧透的是,产品系列三, 主要是针对docker的使用和管理的相关产品; 细心的朋友,其实在前面的文章里,就已经看到有关这个产品的信息了,在前面有文章介绍了一个产看docker容器运行指令的一个docker镜像,就是产品系列之一。这个只是个开胃菜。这个才是这个系列里的主要核心, docker和docker swarm集群的可视化管理平台。现在项目的名称暂时定为 boot4go-dockerUI。 通过这个项目名称,应该大致可以看到产品的功能是和docker相关的原创 2022-06-30 12:26:55 · 430 阅读 · 0 评论 -
爱上开源之golang入门至实战第三章-性能分析PPROF
如同上一节内容介绍的,不论哪种语言,我们在进行开发的时候,都必须致力于能够尽可能的提升程序的运行效率和稳定。Golang提供了工具包PPROF(Program Profiling),Golang Pprof是一种对golang开发的程序进行可视化和分析性能数据的工具。3.4.1 工作原理性能分析的工作原理大致上都是类似的;从过程上都包括两个部分性能数据样本采集样本数据的分析golang pprof也由这两个过程组成,不同的过程,由不同的组成部分实现;在性能数据样本采集的过程中;golang pprof通过在原创 2022-06-29 13:04:38 · 264 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-内存管理
2.5.1.6 内存管理作为入门学习一门编程语言;我们还是必须要对该语言编译及运行时的内存分配有一定的了解,这样可能你会更容易去深深的理解语言基础中的一些问题;这里我们也简要的了解一些Golang里变量的内存分配的基础知识计算机组成里两个非常重要的概念:堆和栈( Stack )是一种拥有特殊的线性表数据结构;栈只允许往线性表的的顶端放入数据,顶端取出数据,按照后进先出(LIFO,Last In First Out )的顺序进行数据读写的操作; 往栈中放入元素的过程叫做入栈。入栈会增加栈的元素数 ,最后放入的原创 2022-06-28 12:39:29 · 196 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-作用域
2.5.1.5 作用域和所有的编程语言一样;变量的使用范围是存在作用域的,超过变量的作用域,外部对变量是不能进行使用的。如果一个变量在函数体或者结构体之外进行声明的话,则此变量的作用域是全域;也被称为全局变量;全局变量,可以在这整个包或者引用该包的外部进行使用;提示在函数体内声明的变量,相对于上面所提到的全局变量,可称为局部变量;局部变量的作用域仅仅只存在函数体内;局部变量的作用域可以通过代码块(用大括号括起来的部分)判断,局部变量在其作用域(代码块)结束后,局部变量释放,内存地址被回收。在同一个代码块内部原创 2022-06-27 14:17:58 · 162 阅读 · 0 评论 -
爱上开源之golang入门至实战-第二章语言基础-变量
变量和常量都是数据类型的载体,从名称上就可以看出常量和变量的不同,常量表示不能改变的数值,而变量表示能够改变的数值。这里先来看一个示例代码。func printSize() { const PI float64 = 3.14 // 定义一个名为PI的常量 var r, v float64 // 定义名为r, v的变量, 变量定义,r,v值均为0 fmt.Printf("r的值为%f,v的值为%f\n", r,原创 2022-06-24 12:22:40 · 181 阅读 · 0 评论