C++ 17的variant和auto的尝试

std::variant 强类型语言的一个特定就是当要使用一个变量时,必须要确定该变量的类型,并且一旦声明后,就不可更改. 但是 C++17 中收录来自 Boost 库的 variant,它通过一系列复杂的模板,绕过了这个规则.当然,如果使用这个类型,性能会存在些微的损失: variant v, w; v = 12; int i = get(v); w = get(v); w = get(v); // same effect as the previous line w = v; // … “C++ 17的variant和auto的尝试”

Read More

安装 Istio 0.2.12

介绍 Istio 是 Service Mesh 的具体实现,它使用十分简单的方式为微服务构建一层网络.这层网络具有可控性,而运行在这层网络上的微服务并不需要做出任何改动,即可无缝使用. Istio主要由Envoy、Pilot、Mixer组成,各自的有特定的功能: Envoy: 以 sidecar 的形式和应用服务运行与同一个 pod 中,通过修改 iptables 来代理应用程序的所有出入流量 Pilot: 类似控制中心,根据设定的指令,控制所有 Envoy 的行为 Mixer: 从 Envoy 处获取流量属性, 根据预设的规则对流量进行处理 部署 curl -SL -O https://github.com/istio/istio/releases/download/0.2.12/istio-0.2.12-linux.tar.gz tar -zxf istio-0.2.12-linux.tar.gz cd istio-0.2.12 # … “安装 Istio 0.2.12”

Read More

理解 Service Mesh

现今有了 Kubernetes 这类微服务编排工具后,微服务这项架构引得越来越多的企业使用. 虽然微服务之间都是相互独立,可以做到互不影响,但是随着量级的增加,微服务的管理将会越加趋于复杂,于此之下衍生微服务的治理问题是亟待解决的. 关注 Kubernetes 的人可能发现在一些 Kubernetes 交流社区已经悄然兴起了一些微服务治理的手段和工具,而其中最常见的一个词应该是Service Mesh. 这个词的流行是来自 Linkerd 公司的工具 Linkerd ,这是 Service Mesh 技术的具体实现,当然也有其他的工具实现 Service Mesh,比如最近火热的 Istio. 它们都是基于服务网格的设计实现,核心是一个透明代理,用以提供底层服务间的通信.因为处于通信底层,所以可以供上层实现: 服务发现 负载均衡 路由 限流 熔断 错误应答规则 超时重试 既可以实现功能而无需入侵服务内部,这无疑大大降低了微服务治理的门槛. 以 Kubernetes 下的 Istio 为例,其在部署后,会在创建的 … “理解 Service Mesh”

Read More

解决容器构建错误 E: List directory /var/lib/apt/lists/partial is missing. – Acquire (13: Permission denied)

使用Dockerfile构建一个镜像,如果使用的base image 设置了USER项,则之后的所有构建动作则切换到了USER指定的用户,且docker run该镜像后的用户也是USER指定的用户。 因此为了在base image上继续添加构建动作,则可以使用USER root切换到root用户执行构建,再在构建结束时使用USER someone切换为原用户. FROM someimage … … USER root … USER someone …

Read More

VMWare克隆CentOS 6系统导致无法启动网络解决记录

公司服务器上周挂了后,需要新的系统,于是用了之前服务器导出的CentOS6的镜像。 成功部署后,发现无法访问,控制台登陆后发现network.service没起来,于是重启network. [root@localhost]# service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth1: Error: No suitable device found: no device found for connection’System eth1′. … “VMWare克隆CentOS 6系统导致无法启动网络解决记录”

Read More

Raspberry Pi 2B 体验 Ubuntu Core 系统

前些天看到 Ubuntu 针对 IoT 推出的系统有树莓派的版本,叫做 Snappy Ubuntu Core . 我的树莓派 2B 之前用着 CentOS 的 armhf 版,从15年到现在一直很稳定.但是挡不住对新鲜事物的尝试,今天就特地换 Ubuntu Core 来试试. 介绍 Snappy Ubuntu Core 是 Canonical 针对 IoT 和 Embedded 基于 Ubuntu 系统推出的精简定制版,其特点就是 Snap 包管理器. Ubuntu … “Raspberry Pi 2B 体验 Ubuntu Core 系统”

Read More

用TypeScript实现对WebSocket的封装-Part-2

在驱动接口声明完成后,实现功能部分会比较繁复,需要考虑保活/断线重连/消息丢失重发/消息去重,等大部分弱网络下的问题,这是为了方便上层的调用,上层无需关心底层驱动的实现. 实现`chat-ws.ts`: “`typescript ///<reference path="./chat-ws.d.ts" /> import { IntervalTimer, ETimerEventType as ETETP } from './chat-timer'; @Injectable export class ChatWSProvider implements IChatWSProvider { construtor(){ //… } private logger: ILogger = null; private remoteAddr: string; private webSocket: … “用TypeScript实现对WebSocket的封装-Part-2”

Read More

用TypeScript实现对WebSocket的封装-Part-1

在 node.js 的第三方 module 中提供了许多优质的 WebSocket 驱动,比如 ws 和 Socket.IO,不过 TypeScript 内置库也已经实现了 WebSocket 驱动.因此可以无需添加第三方 WebSocket 库. 得益于 TypeScript 强大语法的支持,因此代码可以像编译型语言那样先对用到的类型进行声明,然后对接口实现定义. 先前项目前端使用 TypeScript,因此使用了 TypeScript 实现了WebSocket的聊天驱动.这些天来总结了项目关于聊天驱动底层的一些经验与问题,故记录下. 废话不说. 首先定义通知上层的事件回调接口,这些事件通常是收到 ws 数据或 ws 异常后触发的,因此可以按照功能分为: 登录事件回调 : type FnOnLoginCallback,来自登录成功后的事件回调声明 登出事件回调 : … “用TypeScript实现对WebSocket的封装-Part-1”

Read More