- 博客(294)
- 资源 (9)
- 收藏
- 关注

原创 微服务相关
基于etcd做服务发现和注册开启服务注册开启服务注册只需配置Etcd即可,配置如下:Etcd: Hosts: - 127.0.0.1:2379 Key: hello.rpcHosts为etcd服务节点地址,Key为服务地址对应的key前缀,当服务启动的时候即可自动的进行服务注册...
2020-11-25 22:28:56
322

原创 【Go】Golang小技巧总结
初步整合GraphQL+ginjson与 map转换为structpackage mainimport ( "encoding/json" "fmt" "github.com/goinggo/mapstructure")func JsonToMap() { jsonStr := ` { "name":"liangyongxing", "age":12 } ` var mapResult map[string]interface{
2020-09-15 00:10:40
605

原创 K8S知识点记录
在本地调试运行在 Pod 中的数据库查看podkubectl get podkubectl port-forward 端口映射kubectl port-forward dev-db-5959f58bd7-88zlm 5432:5432 --address=0.0.0.0启动Django 本地环境DJANGO_SETTINGS_MODULE=project_name.settings_local python3 ./manage.py runserver........
2020-07-31 18:13:45
1385
1
原创 【Go】锁相关
Mutex 就实现了这个接口,Lock请求锁,Unlock释放锁Locked:表示该 mutex 是否被锁定,0 表示没有,1 表示处于锁定状态;Woken:表示是否有协程被唤醒,0 表示没有,1 表示有协程处于唤醒状态,并且在加锁过程中;Starving:Go1.9 版本之后引入,表示 mutex 是否处于饥饿状态,0 表示没有,1 表示有协程处于饥饿状态;Waiter: 等待锁的协程数量。方法解析。
2023-08-17 12:55:00
653
原创 【Vue3】学习记录
块级作用域是指变量的作用范围被限制在一个代码块内,通常用大括号表示,比如if语句、for语句、函数等。使用let声明的变量只能在声明的块内使用,不能跨越代码块。var:在JavaScript中,var是声明变量的最常用的关键字。var声明的变量的作用域是函数级的,如果在函数内部声明的变量,其作用域将限制在函数体内部。如果在函数外部声明的变量,则其作用域将是全局的。const:const也用于声明变量,但声明的变量必须被初始化,并且初始化后不能再被修改。const声明的变量也是块级作用域的,不能跨越代码块。
2023-04-12 14:17:34
177
原创 【数据库篇】MySQL知识点
如果比较2个字符串的字符集不同,MySQL会先将其转成同一个字符集再进行比较,如果2个字符集不兼容,则会出错。Mysql5.0以后的版本会做隐式转换。还可以使用前缀和collate子句来指定字符串的字符集和校对字符集。这里有一个通用原则可以供我们使用:先为服务器或者数据库选择一个合理的字符集,然后根据不同的实际情况,让某个列选择自己的字符集。原来对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,
2023-02-07 21:56:14
1017
原创 【微服务架构】Protocol Buffer序列化原理解析
通过将 结构化的数据 进行 串行化(序列化),从而实现 数据存储 / RPC 数据交换的功能序列化: 将 数据结构或对象 转换成 二进制串 的过程反序列化:将在序列化过程中所生成的二进制串 转换成 数据结构或者对象 的过程。
2022-11-14 16:19:01
1689
原创 【微服务】服务注册与发现
所谓服务注册中心就是一个保存可用服务实例的数据库服务注册与服务发现是在分布式服务架构中常常会涉及到的东西,业界常用的服务注册与服务发现工具有 ZooKeeper、etcd、Consul 和 Eureka。Consul 的主要功能有服务发现、健康检查、KV存储、安全服务沟通和多数据中心。Consul 与其他几个工具的区别可以在这里查看 Consul vs. Other Software。
2022-10-25 22:17:17
168
原创 【Kubernetes】K8S下gRPC负载均衡问题
答案是 HTTP/1.1 的 复用是串行的,当请求到达的时候,如果没有空闲连接那么就新创建一个连接,如果有空闲连接那么就可以复用,同一个时间点,连接里最多只能承载一个请求,结果是 HTTP/1.1 可以连接多个 pod;而 HTTP/2 的复用是并行的,当请求到达的时候,如果没有连接那么就创建连接,如果有连接,那么不管其是否空闲都可以复用,同一个时间点,连接里可以承载多个请求,结果是 HTTP/2 仅仅连接了一个 pod。为什么 HTTP/1.1 的复用没问题,而 HTTP/2 的复用就有问题?
2022-10-14 20:35:48
1404
2
原创 【数据库篇】MySQL 事务篇
之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;MVCC 的目的就是多版本并发控制,在数据库中的实现,就是为了解决读写冲突,它的实现原理主要是依赖记录中的 3个隐式字段,undo日志 ,Read View(读视图) 来实现的。不可重复读:事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。
2022-09-20 23:13:26
918
原创 k8s CRD相关
Kubernetes 1.7之后,提供了CRD(CustomResourceDefinitions)自定义资源的二次开发能力来扩展kubernetes API,通过此扩展可以向kubernetes API中增加新的资源类型,会比修改kubernetes apiserver的源代码或创建自定义的apiserver来的更加的简洁和容易。
2022-09-10 16:40:16
1773
原创 【微服务架构】分布式限流策略
在k8s中,服务是动态扩缩容的,相应的,每个节点应该都要有所变化,如果对外宣称限频100qps,而且后续业务方真的要求百分百准确,只能把LoadingCache的过期时间调小一点,让它能够近实时的更新单节点的qps。在实际的服务中,数据上报服务一般无法确定客户端的上报时间、上报量,特别是对于这种要求高性能,服务一般都会用到HPA来实现动态扩缩容,所以,需要去间隔一段时间去获取服务的副本数。如果服务的节点动态调整,单个服务的qps也能动态调整。......
2022-08-02 15:17:38
1090
原创 【微服务架构】分布式事务
基于本地消息表的方案中,将本事务外操作,记录在消息表中其他事务,提供操作接口定时任务轮询本地消息表,将未执行的消息发送给操作接口。操作接口处理成功,返回成功标识,处理失败,返回失败标识。定时任务接到标识,更新消息的状态定时任务按照一定的周期反复执行对于屡次失败的消息,可以设置最大失败次数超过最大失败次数的消息,不进行接口调用等待人工处理。..................
2022-07-14 23:06:31
418
原创 【备忘】Docker run standard_init_linux.go:211: exec user process caused “no such file or directory“
文章目录方案一:修改文件格式(check所有打进镜像启动需要的文件,重点关注docker-entrypoint.sh)方案二:更换基础镜像方案三:静态编译 – Golang Build过程中报的这个错。方案四:方案一:修改文件格式(check所有打进镜像启动需要的文件,重点关注docker-entrypoint.sh)是文件格式问题,需要修改 fileformat=unix方案二:更换基础镜像换基础镜像 为FROM centos方案三:静态编译 – Golang Build过程中报的这个错。go
2022-05-30 20:43:12
177
原创 【k8s】kubernetes网络
文章目录k8s网络模型同一节点同一个POD上Container通信同一个 Node 下 不同Pod 间通信模型:不同一节点不同node节点上pod和pod通信k8s网络接口 CNI路由网络覆盖网络pod与service之间的网络阿里云k8s在pod内访问 自建数据库k8s网络模型Kubernetes 的网络利用了 Docker 的网络原理,并在此基础上实现了跨 Node 容器间的网络通信。Kubernetes之POD、容器之间的网络通信同一节点三个网络设备:eth0: 节点主机网卡dock
2022-05-13 15:12:59
492
原创 【Devops】ArgoCD实战
argocd官网:https://argo-cd.readthedocs.io/en/stable/#getting-started整体发布流程如图所示用户提交 应用发布文件(k8s manifest yaml / helm / kustomize 等)到 git 仓库(gitlab/github 等)argocd 监听 git 仓库的文件变化,根据配置手动或者自动把应用发布文件同步变更到 k8s 集群中创建名称空间,下载yaml文件kubectl create ns argo//在安装y
2022-04-25 10:56:26
1525
原创 《微服务治理》服务网格-Istio实战
Istio的安装与部署参考:https://github.com/AliyunContainerService/k8s-for-docker-desktopcurl -L https://istio.io/downloadIstio | sh -配置环境变量source .bash_profile安装 Istioyang@192 ~$ istioctl manifest apply --set profile=demoThis will install the Istio 1.13.2
2022-04-17 22:02:51
1527
1
原创 《后端》开放平台API安全设计
在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,加上之前面试中也被问到项目中开放平台的安全相关问题,因此有时间整理下思路,对于接口加密及签名的相关知识做了一个系统性的总结开放平台API接口加密,签名策略参考各大平台策略支付宝支付: appid+ PrivateKey私匙转账+退款:1.RSA2(非对称)公匙加密 2.根证书 3.应用公匙证书func (s *transferAccountService) newClient() *alipay.Client { client, e
2022-04-04 00:27:48
2601
原创 【后端】消息队列--Kafka篇
parition中的消息采用多个小文件段的方式存储,很容易实现消息定期清除或删除已经消费完的文件。通过索引文件可以快速定位message在日志文件中的位置。索引文件通过Mmap技术直接映射到内存中,这样对索引的操作就不需要操作磁盘IO,也减少了数据在内存中的拷贝次数。索引文件采用稀疏存储,可以大幅降低索引文件映射到内存中时占用的内存空间大小。它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络IO损耗通过mmap提高I/O速度,写入数据的时候由于。
2022-04-02 00:22:48
3492
原创 《微服务架构》注册配置中心
文章目录注册中心consul1、Consul服务注册中心的整体架构2.1 Consul Agent2.2 Consul Server3、Consul如何通过Raft协议实现强一致性?4、Consul如何通过Agent实现分布式健康检查?5、consul acl访问控制注册中心因为服务是单独部署的,因此服务间要想相互调用只能通过RPC的方式:部署在机器A上的用户服务通过RPC的方式调用部署在机器B上的订单服务。这就引入了微服务架构中一个重要的组件:服务发现与注册中心。你要调用订单服务的接口,首先你得知道
2022-03-10 22:15:25
878
1
原创 【微服务】微服务配置中心
为什么要配置中心?1.配置数据脱敏2.防止出错,微服务数量多起来后,配置多不好管理配置中心nacosconsul、etcd服务配置热更新想要使程序在不重启的前提下更新配置,探索了以下几种方式:信号量触发更新API 手动触发更新监听文件触发更新使用第三方包配置中心主动推送如nacos等信号量触发更新对系统进程调用监听,当接收到 syscal.SIGHUP 或者 syscal.SIGUSR1 信号时,调用 reload () 函数对 config 进行重新读取赋值。核心代码:h
2021-12-26 17:24:00
762
原创 【面试】Docker 面试篇
文章目录为什么容器技术在docker之前没有爆发的原因?docker 如何做到资源隔离?namespace有五种容器与镜像的关系docker重要组件有哪些?dockerdrunC 与 containerd剖析 Docker 网络实现及 Libnetwork 底层原理Dcoker 网络标准docker 网络模式host模式container模式bridge 桥接模式linux veth bridgenone模式docker同宿主机容器和不同宿主机容器之间怎么通信?你对k8s的理解为什么容器技术在docker
2021-11-19 15:49:52
1683
原创 【面试】系统架构设计(持续更新)
微博热搜数据设计设计一个限流器,满足100w QPS 的限流。令牌桶。100w的计数器,然后每次请求去获取令牌,拿到就请求,拿不到就丢弃或者等待,等待超时就丢弃。然后面试官问怎么实现?我回答了,然后不满足他的要求,让我继续优化。然后我说在代理层面做,他说不一定能抗住这么大的请求量,你的处理延时怎么处理。然后我说分发在每个服务器上面做,每个服务器限小流,然后如果负载均衡就可以实现整体限流满足要求。......
2021-10-29 18:15:05
2667
原创 【后端】设计模式总结
文章目录导读1. 设计模式2. 设计模式的分类3. 面向对象设计模式实现1.单例模式2.简单工厂3.抽象工厂导读1. 设计模式设计模式是对软件设计中普遍存在或反复出向的各种问题所提出的解决方案。每一个设计模式系统地被命名、解释和评价了面向对象系统中一个重要和重复出现的设计。2. 设计模式的分类创建型模式:工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式。隐藏底层模块的逻辑,关注怎么创建对象。结构型模式:适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式。类之间如何协同
2021-10-23 12:33:20
894
原创 【数据库篇】NoSQL数据库
Cassandra高可用性和可扩展的分布式数据库, 它提供了跨云服务提供商、数据中心和地理位置的操作简便性和轻松的复制,并且可以在混合云环境中每秒处理PB级信息和数千个并发操作。高可用性和高可伸缩性是Cassandra最闪亮的特点。没有单点故障(2)数据模型Key Space(对应 SQL 数据库中的 database)一个Key Space中可包含若干个CF,如同SQL数据库中一个database可包含多个table。Key(对应 SQL 数据库中的主键)在Cassandra中,每一行数据记
2021-09-21 19:35:10
120
原创 【Python】Django知识点记录
最近在做django 项目,重温动态语言的魅力如何区分项目配置(生产、测试)本地调试: 终端指定 settingspython3 manage.py runserver --settings=AIService.debug_settings部署: Dockerfile中指定不同的wsgi.py文件来区分CMD ["gunicorn", "-c", "gunicorn.conf.py", "AIService.debug_wsgi"]CMD ["gunicorn", "-c", "gunico
2021-09-07 23:36:17
398
原创 【Go】标准库底层实现 ①
文章目录数据类型引用类型slicemapchannelchannel存在3种状态:context原理panic revover为什么defer才能recoverreflect什么是反射为什么要用反射,(需要反射的 2 个常见场景)defernew make数据类型引用类型slice扩容规则当需要的容量超过原切片容量的两倍时,会使用需要的容量作为新容量。(长度是奇数就+1为容量,是偶数就长度为容量)当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地
2021-08-20 00:49:31
1015
原创 【微服务】【GO训练营总结】
gRPC 和服务发现这是为了解决去中心化的核心目标而引入的。选择 gRPC 的原因gRPC 是基于 http2 双向流且可复用连接,比 http1.1 的单向流省 tcp 连接;代码即文档,表现力比 http restful 强,能提高接口的标准化;可支持在公网,统一内网外通信healthCheck,端对端异步检测,辅助平滑发布服务发现客户端:每个客户端实现服务实例的发现和相同的负载均衡算法,并直连服务实例进行通信;服务端:中间加入网关层,网关实现服务实例的发现,客户端只连网关,好
2021-08-17 00:01:55
525
原创 【微服务】分布式一致性算法-Paxos、Raft、ZAB、Gossip
RaftConsul如何通过Raft协议实现强一致性?首先,库存服务注册到Leader Server的时候,会采取Raft协议,要求必须让Leader Server把这条注册数据复制给大部分的Follower Server才算成功。这就保证了,如果你认为自己注册成功了,那么必然是多台Consul Server都有这条注册数据了。如果你刚发送给Leader Server他自己就宕机了,那么这次注册会认为失败。此时,Consul Server集群会重新选举一个Leader Server出来,你需要再次重新注
2021-08-07 14:37:13
467
原创 【微服务】RPC和HTTP
文章目录RPCRPC工作模式gRPCgRPC的特性与优缺点1.基于HTTP/22.IDL使用ProtoBuf3.多语言支持HTTP和RPC的优缺点Go语言中的RPC支持与处理grpcprotobuffer 为什么高效Protocol buffers 反序列化RPCRPC(Remote ProcedureCall,远程过程调用) 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OS
2021-08-06 11:13:27
3863
原创 【Go】面试题篇 三
根对象到底是什么?根对象在垃圾回收的术语中又叫做根集合,它是垃圾回收器在标记过程时最先检查的对象,包括:全局变量:程序在编译期就能确定的那些存在于程序整个生命周期的变量。执行栈:每个 goroutine 都包含自己的执行栈,这些执行栈上包含栈上的变量及指向分配的堆内存区块的指针。寄存器:寄存器的值可能表示一个指针,参与计算的这些指针可能指向某些赋值器分配的堆内存区块。有了 GC,为什么还会发生内存泄露?形式1:预期能被快速释放的内存因被根对象引用而没有得到迅速释放(局部变量被全局变量引用
2021-08-04 12:24:13
187
原创 【运维篇】阿里云SLS日志服务
选择project,建立logstore建立了ps-pro配置logtail,接入pod数据日志格式非常多,我们选择docker标准输出配置如下{ "inputs": [ { "detail": { "Stderr": true, "IncludeLabel": { "io.kubernetes.container.name": "you_p
2021-07-19 16:02:56
3847
2
原创 【Go】Golang内存管理篇 ⑤
一. 内存管理内存分配器堆和栈区别1.空间分配区别:栈:由操作系统(编译器)自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。堆:一般由代码分配释放,若代码没有显式释放,程序结束时可能由OS回收,分配方式类似链表。2.缓存方式区别:栈:使用的是一级缓存,通常都是被调用时处于存储空间中,调用完毕立即释放。堆:存放在二级缓存中,生命周期由垃圾回收算法来决定。3.数据结构区别:栈:先进后出的线性结构。堆:类似于一颗树。1.1 go内存分配
2021-07-16 15:19:18
696
原创 【数据库篇】Redis知识点
2.1 redis 特性redis为什么这么快1.基于内存Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。2.单线程上下文切换线程只需要保存线程的上下文(相关寄存器状态和栈的信息)Redis采用了单线程的模型,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU。3.IO多路复用技术redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。多路-指的是多个socket
2021-07-14 15:45:02
671
1
ROSTCM6.zip
2019-08-24
Pandas_exercises-master.rar
2019-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人