Blog

理解Go程序进程的内存空间布局

📅 2021-10-30

Linux进程内存分布简介 #

在Linux系统中,一个程序进程在内存布局上遵循一定规律,进程的内存空间布局由高地址到低地址大致可分为以下几段:

  • 栈(stack): 用户态的栈,栈的大小是固定的,其大小可以使用ulimit -s查看和调整,一般默认为8Mb,栈从高地址向低地址增长(函数调用)
  • 堆(heap): 动态分配的内存空间,程序在运行时动态分配和释放,堆内存的分配不是连续的,整体上是从低地址向高地址增长
  • bss(未初始化数据区): 未初始化数据区bss, 存放全局的未初始化赋值的变量
  • data(初始化数据区): 存放已经初始化的全局变量数据
  • text: 存放程序代码

memory-layout-c.jpg

...

Apache Pulsar学习笔记08: 使用Pulsar Schema管理消息数据的类型安全性

📅 2021-10-29

前面两节分别介绍了如何使用Pulsar Java客户端库和Go客户端库开发Producer、Consumer。 目前主流的消息中间件都不负责消息在从生产者到消费者上下游传递过程中的类型安全性,而由客户端自己负责消息的序列化和反序列操作来保障消息传递的类型安全。 Pulsar也支持这种客户端的方法,生产者将具体类型的消息对象序列化成字节数组发送到Topic,消费者从Topic接收字节数组并反序列化为具体类型的消息对象。 除了由客户端负责消息类型安全性的方法,Pulsar还提供了一种服务端的方法即Pulsar Schema,本节将学习如何使用Pulsar Schema管理消息数据的类型安全性。

...

使用Delve的调试和反汇编功能阅读Go源码

📅 2021-10-28

Delve是一个专门用于Go语言的调试器,之前整理过Delve的基本使用,使用Delve调试Go程序。 本文进一步介绍如何使用Delve阅读Go的源码并找到一些语法在Go的内部是如何实现的。这里将一下在Go里创建channel的语法为例make(chan int, 100),演示如何使用Delve如何找到make chan在Go内部的源码实现以及channel具体的数据结构是什么样的。

...

Apache Pulsar学习笔记06: Pulsar的Java客户端库

📅 2021-10-27

上一节学习了Pulsar中的生产者、消费者、订阅和订阅类型。 当一个消费者连接到Pulsar时,会创建一个订阅(Subscription),订阅有4种类型:独占模式、灾备模式、共享模式和基于key的共享模式。 订阅是命名好的配置规则,指导消息如何投递给消费者。生产者和消费者是连接到Pulsar的客户端,上节使用pulsar-client连接到Pulsar集群完成了消费者和生产者的测试。 真实场景中的生产者和消费者是我们开发的程序,从本节开始将学习如何使用各种编程语言开发Pulsar的生产者和消费者。

...

Apache Pulsar学习笔记07: Pulsar的Go客户端库

📅 2021-10-27

上一节介绍了如何使用Pulsar的Java客户端开发Pulsar的Producer、Consumer和Reader,Pulsar使用二进制协议在Producer/Consumer和Brokers之间通信,在开发Consumer时可以使用同步或异步的方式接收消息,同时支持批量接收消息和多主体订阅的特性,消费者在处理消息时还要考虑根据具体业务场景考虑使用死信策略。本节将介绍Pulsar Go Client的使用,演示使用Pulsar的Go客户端库开发Producer和Consumer。

...

Apache Pulsar学习笔记05: Pulsar的生产者、消费者、订阅和订阅模式

📅 2021-10-26

上一节学习了Pulsar的逻辑架构,Pulsar在逻辑结构上由租户(Tenant)、命名空间(Namespace)、主题(Topic)组成。 Pulsar是一个多租户系统,租户可以跨集群分布,租户代表了组织中特定的业务单元、产品线、核心功能,对应组织中的不同部门或团队负责。 Pulsar中消息的读写都是面向Topic的,支持分区Topic,分区Topic内部实现为等于分区数量的N个内部Topic,多个Broker就可以为多个内部Topic服务,均匀分布负载,分区发布由Pulsar自动管理对用户透明。

...

Apache Pulsar学习笔记04: Pulsar的租户、命名空间和Topic

📅 2021-10-25

上一节在docker容器运行并体验了单机模式的Pulsar,使用命令行管理工具pulsar-admin创建了租户、命名空间和Topic,了解了Pulsar Admin REST API。 本节将对pulsar的租户、命名空间、Topic相关的内容做一下整理。

Pulsar被设计为一个多租户系统,租户可以跨集群分布,每个租户都可以有单独的认证和授权机制,可以针对租户设置存储配额、消息生存时间TTL和隔离策略。 Pulsar的多租户功能使其可以为组织中的不同部门、不同团队提供安全且独占的消息服务,允许不同部门、不同团队之间共享。这样一个Pulsar实例下边多个Pulsar集群可以成为整个组织的消息平台服务。 Pulsar使用租户、命名空间、主题的层次结构支持多租户,这就是Pulsar的逻辑架构,描述了在Pulsar中如何存储数据的逻辑结构。

...

Apache Pulsar学习笔记03: 本地开发环境docker容器中运行Pulsar

📅 2021-10-24

上一节学习了单个Pulsar集群的组成: 无状态智能路由层Pulsar Proxy(可选)、无状态服务层Pulsar Broker、消息持久化存储Bookies,配置协调和元数据存储Zookeeper。 本节我们将在个人本地开发环境开始使用Pulsar,对于本地开发和测试只需要运行单机模式的Pulsar。在容器中运行Pulsar是本地开发测试最简单的方法。 这里将在本地开发环境中使用docker启动Pulsar Standloen的容器。

...

离线部署轻量级Kubernetes发行版K3s

📅 2021-10-23

K3s简介 #

K3s是一个轻量级的Kubernetes发行版,它针对边缘计算、物联网等场景进行了高度优化。 K3s做了以下功能:

  • 将众多k8s组件打包成单个二进制文件,以简化部署,通过封装在简单的启动程序自动处理很多复杂的TLS配置,使K3s具有自动化和管理包括证书分发在内的复杂集群操作的能力
  • 默认使用轻量级别的存储后端sqlite3,同时又支持使用etcd3, MySQL, PostgreSQL作为存储后端
  • 默认提供的配置适用于轻量级场景且默认的配置是安全的
  • 默认安装集成了很多实用功能和组件,如local-path-provisioner, metrics-server, traefik ingress controller

运行K3s所需的资源相对较少,因此K3s适用于边缘计算、物联网等场景,当然也适用于开发和测试场景,使用K3s不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源。

...

Apache Pulsar学习笔记02: 初步了解Pulsar的架构,单个Pulsar集群的组成

📅 2021-10-22

从分布式系统的部署和管理角度来看,大多数分布式系统都将集群作为的最高级别抽象,如果涉及到跨地域部署时会在不同地域部署多个集群,但这需要将每个集群视为独立的系统进行配置和管理。 Pulsar提供了一个比Pulsar Cluster(Pulsar集群)更高级别的抽象,叫Pulsar Instance(Pulsar实例)。一个Pulsar Instance由多个Pulsar Cluster组成,一个Pulsar实例中的集群之间可以相互跨地域复制数据。 Pulsar Instance作为一个唯一的单元,可以从各地域中的一个位置统一管理。

...

© 2025 青蛙小白 | 总访问量 | 总访客数