西维蜀黍

【Protobuf】Protocol Buffers Convention Guide

This document provides a style guide for .proto files. By following these conventions, you’ll make your protocol buffer message definitions and their corresponding classes consistent and easy to read.

Note that protocol buffer style has evolved over time, so it is likely that you will see .proto files written in different conventions or styles. Please respect the existing style when you modify these files. Consistency is key. However, it is best to adopt the current best style when you are creating a new .proto file.

  ...


【Protobuf】Protocol Buffers 深入

更新 message

如果后面发现之前定义 message 需要增加字段了,这个时候就体现出 Protocol Buffer 的优势了,不需要改动之前的代码。不过需要满足以下 10 条规则:

  1. 不要改动原有字段的数据结构。
  2. 如果您添加新字段,则任何由代码使用“旧”消息格式序列化的消息仍然可以通过新生成的代码进行分析。您应该记住这些元素的默认值,以便新代码可以正确地与旧代码生成的消息进行交互。同样,由新代码创建的消息可以由旧代码解析:旧的二进制文件在解析时会简单地忽略新字段。(具体原因见 未知字段 这一章节)
  3. 只要字段号在更新的消息类型中不再使用,字段可以被删除。您可能需要重命名该字段,可能会添加前缀“OBSOLETE_”,或者标记成保留字段号 reserved,以便将来的 .proto 用户不会意外重复使用该号码。
  4. int32,uint32,int64,uint64 和 bool 全都兼容。这意味着您可以将字段从这些类型之一更改为另一个字段而不破坏向前或向后兼容性。如果一个数字从不适合相应类型的线路中解析出来,则会得到与在 C++ 中将该数字转换为该类型相同的效果(例如,如果将 64 位数字读为 int32,它将被截断为 32 位)。
  5. sint32 和 sint64 相互兼容,但与其他整数类型不兼容。
  6. 只要字节是有效的UTF-8,string 和 bytes 是兼容的。
  7. 嵌入式 message 与 bytes 兼容,如果 bytes 包含 message 的 encoded version。
  8. fixed32与sfixed32兼容,而fixed64与sfixed64兼容。
  9. enum 就数组而言,是可以与 int32,uint32,int64 和 uint64 兼容(请注意,如果它们不适合,值将被截断)。但是请注意,当消息反序列化时,客户端代码可能会以不同的方式对待它们:例如,未识别的 proto3 枚举类型将保留在消息中,但消息反序列化时如何表示是与语言相关的。(这点和语言相关,上面提到过了)Int 域始终只保留它们的值。
  10. 将单个更改为新的成员是安全和二进制兼容的。如果您确定一次没有代码设置多个字段,则将多个字段移至新的字段可能是安全的。将任何字段移到现有字段中都是不安全的。(注意字段和值的区别,字段是 field,值是 value)
  ...


【Linux】命令 - nohup

nohup

nohup就是不挂起的意思(no hangup)。

Linux下一般比如想让某个程序在后台运行,很多都是使用**&**在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

$ /usr/local/mysql/bin/mysqld_safe --user=mysql &

但是我们很多程序并不像mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用**&结尾,但是如果终端关闭,那么程序也会被关闭。但是为了能够后台运行,那么我们就可以使用nohup**这个命令,比如我们有个test.sh需要在后台运行,并且希望在后台能够定期运行,那么就使用nohup:

$ cat test.sh
echo "test"
echo "start sleeping..."
sleep 100
echo "exit"
$ nohup /root/test.sh &
[2] 98791
appending output to nohup.out
$ cat nohup.out
test
start sleeping...
exit
[1]  - 98791 done       nohup test.sh

提示:appending output to nohup.out,证明运行成功,同时把程序运行的输出信息放到当前目录的nohup.out文件中去。

  ...


【Microservices】服务调用

Introduction

In a monolithic application, components invoke one another via language‑level method or function calls. In contrast, a microservices‑based application is a distributed system running on multiple machines. Each service instance is typically a process. Consequently, as the following diagram shows, services must interact using an inter‑process communication (IPC) mechanism.

  ...


【Microservices】常见服务注册(Service Registry)/服务发现(Service Discovery)实现框架

Eureka

Eureka是在Java语言上,基于Restful Api开发的服务注册与发现组件,由Netflix开源。遗憾的是,目前Eureka仅开源到1.X版本,2.X版本已经宣布闭源。

  ...