consul
摘抄:https://cloud.tencent.com/developer/article/1444664
一、什么是服务发现
微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一幅图片:
图中,客户端的一个接口,需要调用服务A, B, …, N。客户端必须要知道所有服务的网络位置的,以往的做法是配置是配置文件中,或者有些配置在数据库中。这里就带出几个问题:
需要配置N个服务的网络位置,加大配置的复杂性
服务的网络位置变化,都需要改变每个调用者的配置
集群的情况下,难以做负载(反向代理的方式除外)
总结起来一句话:服务多了,配置很麻烦,问题多多
既然有这些问题,那么服务发现就是解决这些问题的。话说,怎么解决呢?我们再看一张图
与之前一张不同的是,加了个服务发现模块。图比较简单,这边文字描述下。服务A, B, …, N把当前自己的网络位置注册到服务发现模块(这里注册的意思就是告诉),服务发现就以K-V的方式记录下,K一般是服务名,V就是IP:PORT。服务发现模块定 ...
go限流
摘抄:https://blog.admpub.com/blog/post/admin/常见限流算法和go语言time-rate和go.uber.org-ratelimit讲解
背景:保护服务节点或者数据节点,防止瞬时流量过大造成服务和数据崩溃,导致服务不可用
流量突发、流量突刺 1️⃣ 流量突刺(Traffic Spike)
流量突刺指的是 短时间内(比如几秒钟或者几分钟)请求量的 突发性急剧增加,然后很快恢复正常。突刺通常指短暂的,突如其来的流量激增。
持续时间:短时间内迅速上升,然后恢复正常。
特点:突如其来、瞬间流量激增,通常维持几秒到几分钟。
示例:
在一个短暂的促销活动开始时,用户涌入网站提交订单,导致网站瞬间流量激增,之后恢复正常。
某篇新闻报道发布,造成大量短时间内的访问,突刺流量通常会很快消失。
2️⃣ 流量突发(Burst Traffic)
流量突发通常指在一个较长的时间范围内,请求量突然增加,但它可以是持续一段时间的高峰,而不是一个短暂的波动。
持续时间:虽然也是短期的流量增长,但通常更长时间,可能持续几分钟到几小时。
特点:长时间持续的高流量。 ...
golang注意事项
channel
如果channel关闭后,再操作会怎么样?
查看解析 当一个 channel 被关闭后,再从中取值会有特定的行为。下面是关闭 channel 后的行为总结:
1、关闭后的读取行为
从已关闭的 channel 读取数据:
如果 channel 中还有未取出的数据,可以继续读取这些数据。
一旦 channel 中的数据被取完,再次读取时,将返回该类型的零值,并且读取操作不会阻塞。
例如,如果 channel 类型是 int,则会返回 0;如果是 string,则返回 ""(空字符串)。
检测 channel 是否已关闭:
在接收值时,可以通过第二个返回值来判断 channel 是否已关闭。当 channel 被关闭并且所有数据已经取完时,第二个返回值为 false。
1v, ok := <-ch
v 是接收到的值。
ok 是一个布尔值,当 ok == false 时,表示 channel 已经关闭且没有更多的数据可接收。
2、关闭后的发送行为
向已关闭的 channel 发送数据:
如果你尝试向一个已关闭的 c ...
golang密码学
文档链接
文档链接2
视频链接
一、密码
1.1 发送者、接收者和窃听者
请想象一个Alice向Bob发送电子邮件的场景。在这个场景中,发出邮件的Alice称为 发送者(sender) ,而收到邮件的Bob则称为 接收者(receiver) 。
在讲解发送者、接收者的概念时,用邮件这个例子会比较便于理解,但实际上发送者和接收者这两个术语的使用范围并不仅仅局限于邮件。当某个人向另一个人发送信息时,发出信息的人称为发送者,而收到信息的人称为接收者。另外,被发送的信息有时也统称为 消息(message) 。
Alice向Bob发送邮件:
邮件是通过互联网从Alice的计算机发送到Bob的计算机的。在发送邮件时,邮件会经过许多台计算机和通信设备进行中转,在这个过程中,就存在被恶意窃听者(eavesdropper)偷看到的可能性。
Eve(窃听者)看到邮件的内容
窃听者Eve并不一定是人类,有可能是安装在通信设备上的某种窃听器,也可能是安装在邮件软件和邮件服务器上的某些程序。
尽管邮件内容原本应该只有发送者和接收者两个人知道,但如果不采取相应的对策,就存在被第三方知道的风险。
...
Go‘s 数据结构
教程
Go实现栈与队列
一、链表
单链表:
1234type LinkNode struct { val int next *LinkNode }
循环链表:
1234type Ring struct { next, prev *Ring // 前驱和后驱节点 Value interface{} // 数据}
初始化循环链表:
123456// 初始化空的循环链表,前驱和后驱都指向自己,因为是循环的func (r *Ring) init() *Ring { r.next = r r.prev = r return r}
数组实现链表:【静态链表】
12345678910111213141516171819type Value struct { Data string NextIndex int64}var array [5]Value // 五个节点的数组array[0] = Va ...
gRPC
官方中文文档
视频教学
视频教学2
什么是gRPC
概念:
序列化:将数据结构或对象转换成二进制串的过程
反序列化:将在序列化过程中所产生的二进制串转换成数据结构或者对象的过程
env:
grpc和protobuf
1go get google.golang.org/grpc
1brew install protobuf
protobuf配套go语言的代码生成工具,因为这些文件在安装grpc的时候已经下载下来了,所以使用install即可。
1go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
1go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
1. proto文件编写
模版:
123456789101112131415syntax = "proto3";option go_package = ".;service";service SayHello { rpc Sa ...
go基础学习
a tour of go
golang-china/gopl-zh: :books: Go语言圣经中文版 (github.com) → Go语言圣经 - Go语言圣经 (gopl-zh.github.io)
【尚硅谷】Golang入门到实战教程丨一套精通GO语言_哔哩哔哩_bilibili
https://www.alipan.com/s/1YRzZZ8szDX 提取码: 1fw8
Go语言的特点:
Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go语言:Go = C + Python,说明 Go语言既有C静态语言程序的运行速度,又能达到 Python动态语言的快速开发。
从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
垃圾回收机制,内存自动回收,不需开发人员管理
天然并发
(1) 从语言层面支持并发,实现简单
(2) goroutine,轻量级 ...
mysql
学习资源:
黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括_哔哩哔哩_bilibili 29:57:49
高频 SQL 50 题(基础版) - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台
基础篇
1. 概述
相关概念
名称
全称
简称
数据库
存储数据的仓库,数据是有组织的进行存储
DataBase(DB)
数据库管理系统
操纵和管理数据库的大型软件
DataBase Management System (DBMS)
SQL
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
Structured Query Language (SQL)
而目前主流的关系型数据库管理系统的市场占有率排名如下(2022):
Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。
MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。
SQL Server:Mic ...
C++笔记
万能头:
1#include<bits/stdc++.h>
C++基础知识
1. 常量
在C++中,常量是使用关键字const声明的,意味着一旦被赋值后,它的值就不能被改变。常量提供了一种保护变量不被无意或有意修改的方式,有助于提高程序的可读性和维护性。以下是一些关于C++常量的关键点:
基本常量
使用const关键字创建常量。
必须在声明时初始化。
1const int MAX_USERS = 100;
枚举常量
枚举(Enumeration)是一种用户定义的类型,它包含一组命名的整型常量。
使用enum关键字声明。
1enum Color { RED, GREEN, BLUE };
宏常量
使用预处理器指令#define来定义。
宏在编译之前被处理,替换文本中所有的宏名称。
1#define PI 3.14159
字面量常量
直接出现在代码中的值,如整数10,浮点数3.14,字符'A',字符串"Hello"。
为什么字面量常量是常量? 字面量常量是常量,因为它们表示固定的值,不能被修改 ...
剑指offer
根据这个站刷的:剑指 Offer 题解 | CS-Notes 面试笔记 (cyc2018.xyz)
题目总数76
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('echarts2914'));
// 指定图表的配置项和数据
var option =
option = {
tooltip: {
trigger: 'item'
},
legend: {
top: '5%',
left: 'center'
},
series: [
{
name: 'Access From',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
...