TCP网络编程杂谈

作为一名IT工程师,网络通信编程相信都会接触到,比如Web开发的HTTP库,Java中的Netty,或者C/C++中的Libevent,Libev等第三方通信库,甚至是直接使用Socket API,但是很多程序员都仅限于使用,对于使用的方式是否合理并没有特别深的理解,比如有一股脑的使用线程池解决问题的(虽然大部分情况采用多线程方案不会有什么问题,但是编程复杂度比起单线程提升了很多,线程开的太多也会导致切换过于频繁,性能未必有太大提升),也有始终用一条线程处理所有业务的,然后上线之后经常出现各种服务响应慢等问题。 在介绍TCP的网络通信编程时,不得不提到同步,异步,阻塞,非阻塞这几个概念,C+…

Read More

Zan 连接池

一、设计背景 Zan是基于PHP协程的网络服务框架,提供最简单的方式开发面向C10K+的高并发HTTP服务或SOA服务。 核心特性: 1. 基于 yield 实现了独立堆栈的协程 2. 类似于 Golang 的并发编程模型实现 3. 基于 swoole 提供非阻塞I/O服务 4. 连接池支持 5. 类似 Golang 的defer机制解决由于异常导致的资源未释放、…

Read More

Zan & Swoole2.0

Swoole2.0 alpha版发布,大家可能会有个疑惑, Zan的协程框架是不是要关门大吉了呢? 答案当然是否定的。 Zan和Swoole2.0走的方向是不一样的; Swoole2.0的方向是希望和Golang一较高下; Zan的定位是搭建一个Zan + Golang的生态; Swoole2.0 鸟哥的出现确实让国人在技术界猛的一抬头。 天峰的Swoole也备战了很多年,任重道远。 Zan目前是基于Swoole搭建的,和2.0并没有什么冲突。 大家一起努力吧。 重申下Zan的定位: Zan 的定位是高并发 Web…

Read More

深入浅出Cache

章节 ① 什么是Cache? Cache的目标? ② Caching住哪些内容? ③ 我们想要的Cache产品 ④ Cache使用方式 ⑤ 对于总体系统的提高 ⑥ 关于Sharding ⑦ Cache痛点和关注点 ⑧ 我们用的Cache的产品 ⑨ 我们的一些实践 ① 什么是Cache? Cache的目标? 在说这个之前我们先看下典型Web 2.0的一些架构演变(这里不用”演进”). 从简单的到复杂的通用架构. 首先, 诚然说Cache在互联网公司里,是一个好东西. Cache化,可以显著地提高应用程序的性能和便于提供应用程序的伸缩性(可以消除不必要请求落到外在的不频繁改变数据的DataSource上)…

Read More

Haunt - Youzan 服务发现 概述

背景 Haunt是有赞内部使用的服务发现系统,下面会详细介绍一下该系统的设计与思考。 首先,我们设想一下,我们提供的RESTful API或者其他API的服务,为了完成一次服务请求,服务调用方需要知道服务实例的网络位置(IP地址和端口)。传统应用都运行在物理硬件上,服务实例的网络位置都是相对固定的。比较常见的做法是,服务调用方可以从一个经常变更的配置文件中读取网络位置。而对于一个现代的,基于云端微服务的应用来说,这却是一个很麻烦的问题。如下图所示: PaaS平台中的应用一般都有多个实例,实例故障重启透明化与负载均衡都与服务发现密切相关。通过服务发现机制,可以透明的对多个实例进行访问,并实现负载均衡。而且应用的某个实例随时都可能故障重启,这时就需要动态配置服务调用方的路由信息。…

Read More