Blog

Go 1.18新特性学习笔记01: 安装

2022-03-16
Go

Go 1.18这个大型版本终于发布了,包括新功能、性能改进以及对语言的最大改变。 官方博客称Go 1.18的部分设计甚至开始于10年前首次发布Go的时候。具体来说,Go 1.18包含以下几大特性:

  • 泛型(Generics): Go 1.18开始引入了泛型的支持。现在我们可以从Go官方的泛型教程来学习这个新特性,另外在Go 1.18的发布说明中也有很多关于泛型的使用细节。
  • 模糊测试(Fuzzing): Go成为第一个将模糊测试完全集成到其标准工具链中的主要语言。可以从Go官方的Fuzzing教程中开始学习。
  • 工作空间(Workspaces): Go Module已经被广泛使用,目前Gopher在使用Go Module时最常见的挑战是如何应对在多个Module间工作。Go 1.18通过新的Go工作空间模式解决了这一问题。
  • 20%性能提升: AppleM1、ARM64和PowerPC64用户会很开心! 因为Go 1.17的寄存器ABI调用约定扩展到这些架构,Go 1.18提供了高达20%的性能改进。

安装Go 1.18 #

我在开发机上上的Go版本管理策略如下: 使用MacOS Homebrew安装的go作为主要版本, 因为Go的Homebrew Formula版本更新会延迟Go官方的发布。 所以为了体验Go新版本的特性或者同时在本地保留多个Go的版本,会使用Go Wrapper程序golang.org/dl下载对应版本的Go Wrapper,再使用Wrapper下载安装对应的Go。

...

用rust实现简单的单链表

2022-03-09
Rust, Algorithm

作为初学者,在掌握了rust的基本语法和所有权机制,尝试写一下常见数据结构和算法,目标是为了更好的理解rust的所有权机制。 受限于个人目前对rust仍处于入门阶段,因此本文代码实现不一定是最合适的,甚至可能存在问题。

今天的目标是用rust实现一个简单的单链表LinkedList,同时为此链表提供从头部插入元素(头插法)、翻转链表、打印链表的功能。

...

Spring Cloud笔记04: 将服务注册到Nacos并通过服务发现机制调用服务

2022-02-25
Spring Cloud

前面我们已经在K8S中部署了Nacos集群,并学习了服务注册和服务发现的基本概念。 本节进行一个实战练习,将两个基于Spring Boot的微服务集成到Nacos的服务注册和服务发现。

这两个Spring Boot微服务分别是订单服务order-svc和库存服务stock-svc,订单服务的下单接口中会调用库存服务的库存查询接口。 因为只是演示Nacos和Spring Cloud,所以这两个服务的逻辑十分简单,只会有类似helloworld的演示代码。

...

Spring Cloud笔记03: 服务注册和服务发现的基本概念

2022-02-24
Spring Cloud

上节在K8S集群中部署了Nacos集群,并将Nacos的Web控制台和API以Ingress (nacos.youcomany.com)的形式暴露到了k8s集群外部,便于从外部测试和访问。 这里再次强调Nacos被设计为一个在IDC内部使用的应用组件,而非面向公网环境的产品,因此需要在内部隔离网络中使用,这里为了测试将其暴露到K8S集群外部,如果是生产环境必须做好网络安全策略。

...

Spring Cloud笔记02: 在k8s集群中部署Nacos集群

2022-02-23
Spring Cloud

上一节学习了Nacos的基本概念,Nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台。

在学习如何使用Nacos之前,需要先完成Nacos的部署,Nacos支持多种不同的部署模式,虽然我们这里是以学习为目的的。 但既然Nacos是用于帮助我们构建云原生应用的,那么我们今天就一步到位,在K8S集群上部署一套生产可用的Nacos集群。

...

Spring Cloud笔记01: Nacos简介

2022-02-22
Spring Cloud

1.Nacos是什么 #

Nacos是什么?Nacos官网首页上对Nacos定义如下:

Nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台。

从Nacos的定义可以看出,Nacos有两个核心功能: 服务发现和配置管理。

使用Nacos可以帮助我们发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据和流量管理。

...

Rust 1.58已经发布, 这些新特性需要我们关注

2022-01-14
Rust

最近,Rust 1.58版本发布了,因为Rust新版本发布比较频繁,稳定版本大约每六周就会发布一次,所以每个版本的新特性不会太多。

如果你在以前已经通过rustup安装了Rust,可以通过下面的命令将Rust升级到1.58:

1rustup update stable

Rust 1.58的主要新特性包括:

...

Apache Pulsar学习笔记15: 将Pulsar集群接入到监控系统

2022-01-06
Pulsar

上一节,使用Pulsar官方的Helm Chart在Kubernetes集群中规划并部署了生产可用的Pulsar集群。

在上一节,我们还留了一个小尾巴,在部署Pulsar集群时,禁用了监控相关的组件(promethues, grafana等)。 在以Kubernetes为基础的云原生基础架构中,肯定已经单独部署了以Prometheus为核心的各个监控组件,因此我们希望使用平台统一的Prometheus实现对Pulsar集群的监控。

...

Apache Pulsar学习笔记14: 使用Helm在Kubernetes集群中部署Pulsar

2021-12-31
Pulsar

时间过得比较久了,在开始今天的学习之前先回顾一下前面已经学习的13节的内容。

0.阶段复习 #

Pulsar是一个支持多租户的、高性能的、分布式的Pub-Sub消息系统。

  • 了解Pulsar的架构。Pulsar提供了一个比Cluster更高级别的抽象Instance。
    • 一个Pulsar Instance由多个Pulsar Cluster组成
    • 一个Instance中的Cluster之间可以相互跨地域复制数据
  • 单个Pulsar集群由以下部分组成:
    • Pulsar Proxy: 是无状态的,Proxy作为集群的智能路由层,是负责Pulsar客户端与Pulsar集群交互的统一网关
    • Pulsar Brokers: 也是无状态的,是集群的服务层,Proxy会将客户端的访问请求转发到正确的Broker上。Broker作为服务层与Pulsar的存储层进行交互
    • Bookies: 一个集群有多个Bookie节点(组成Bookeeper集群)负责消息的持久化存储
    • Zookeeper: 用于集群级别的配置和协调,并存储Pulsar集群的所有元数据
  • 以docker容器运行单机Pulsar
    • 学习使用命令行工具pulsar-admin创建tenant、namespace、topic
    • 了解Pulsar Admin REST API
  • tenant、namespace、topic的基本概念
    • Pulsar基于租户、命名空间、主题的逻辑层次结构支持多租户
    • 分区Topic的概念
    • Topic URL格式
    • 持久化Topic和非持久化Topic的概念
  • 生产者和消费者、订阅和订阅模式
    • Pulsar支持: exclusive(独占), failover(故障转移/灾备), shared(共享), key-shared(基于key的共享模式) 4中订阅模式
    • 使用命令行工具pulsar-client进行生产者和消费者测试
  • 使用Pulsar Java客户端库创建生产者、消费者、Reader
    • 消费者端可以使用"同步接收消息", “异步接收消息”, “MessageListener接收” 3种模式,其中MessageListener自带线程池
    • 创建消费者时可以设置消费者的批量接收策略
    • 多主题订阅: 设置单个消费者订阅多个主题
    • 消费异常处理可以使用"无限重试", “捕获并忽略异常”, “死信主题(Dead Letter Topic)“三种方式
    • 使用消息Reader可以由用户自己手动在Topic中定位,读取想要读取的消息
  • 使用Pulsar Go客户端库
    • 消费者端支持consumer.Receive()consumer.Chan()两种方式消费消息。前者对channel关闭和context cancel的情况做了封装,后者要我们自己处理和channel的交互,但也提供了最大的灵活性。
    • 多主题订阅
    • 死信策略和死信主题
    • 使用消息Reader
  • 使用Pulsar Schema管理消息数据的类型安全性
  • Web图形化管理工具Pulsar Manager
  • 延迟消息投递特性
    • 指定多长时间后投递deliverAfter
    • 指定在将来某个时间点投递deliverAt
  • 分区Topic和路由模式
  • 认证和授权
    • 开启JWT身份认证
    • 授权和权限管理

前面的学习一直是基于以docker容器启动的单机Pulsar。今天将学习使用Helm在Kubernetes集群中部署Pulsar集群。

...

使用kubeadm部署Kubernetes 1.23

2021-12-22
Kubernetes

kubeadm是Kubernetes官方提供的用于快速安部署Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。

...

© 2024 青蛙小白