Skip to content

Commit

Permalink
Merge pull request #41 from fucongcong/dev
Browse files Browse the repository at this point in the history
文档更新,v2.0预告
  • Loading branch information
fucongcong authored Jul 3, 2020
2 parents 20f2e61 + 6970bf0 commit 4aeb9bd
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 103 deletions.
70 changes: 38 additions & 32 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,54 +1,60 @@
FROM php:7.1-fpm
FROM php:7.1-cli

MAINTAINER fucongcong

RUN apt-get update -yqq
RUN apt-get install -yqq libpcre3-dev
RUN apt-get install -yqq libfreetype6-dev
RUN apt-get install -yqq libjpeg62-turbo-dev
RUN apt-get install -yqq libmcrypt-dev
RUN apt-get install -yqq libpng-dev
RUN apt-get install -yqq libicu-dev
RUN apt-get install -yqq git
RUN apt-get install -yqq python
RUN docker-php-ext-install gd
RUN docker-php-ext-install zip
RUN docker-php-ext-install intl
RUN apt-get install -yqq build-essential chrpath git-core libssl-dev libfontconfig1-dev libxft-dev
RUN apt-get install -yqq wget
RUN apt-get install -yqq zip
RUN wget https://github.com/redis/hiredis/archive/v0.13.3.zip \
RUN apt-get update -yqq \
&& apt-get install -yqq wget \
&& apt-get install -yqq libpng-dev \
&& apt-get install -yqq libicu-dev \
&& apt-get install -yqq libmcrypt-dev \
&& apt-get install -yqq libpcre3-dev \
&& apt-get install -yqq libjpeg62-turbo-dev \
&& apt-get install -yqq libfreetype6-dev \
&& apt-get install -yqq build-essential chrpath libssl-dev libfontconfig1-dev libxft-dev \
&& apt-get install -yqq zip \
&& wget https://github.com/redis/hiredis/archive/v0.13.3.zip \
&& unzip v0.13.3.zip \
&& rm v0.13.3.zip \
&& cd hiredis-0.13.3 \
&& make && make install \
&& ldconfig \
&& cd .. \
&& rm -rf hiredis-0.13.3
RUN wget https://github.com/swoole/swoole-src/archive/v1.9.22.zip \
&& unzip v1.9.22.zip \
&& cd swoole-src-1.9.22 \
&& rm -rf hiredis-0.13.3 \
&& wget https://github.com/swoole/swoole-src/archive/v1.10.1.zip \
&& unzip v1.10.1.zip \
&& rm v1.10.1.zip \
&& cd swoole-src-1.10.1 \
&& phpize \
&& ./configure --enable-async-redis \
&& make \
&& make install \
&& cd .. \
&& rm -rf swoole-src-1.9.22
RUN echo "extension=swoole.so" > /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini
RUN php -m

RUN wget http://pecl.php.net/get/redis-4.1.0.tgz \
&& rm -rf swoole-src-1.10.1 \
&& echo "extension=swoole.so" > /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini \
&& wget http://pecl.php.net/get/redis-4.1.0.tgz \
&& tar xzf redis-4.1.0.tgz \
&& rm redis-4.1.0.tgz \
&& cd redis-4.1.0 \
&& phpize \
&& ./configure \
&& make \
&& make install \
&& cd .. \
&& rm -rf redis-4.1.0
RUN echo "extension=redis.so" > /usr/local/etc/php/conf.d/docker-php-ext-redis.ini
RUN php -m

RUN docker-php-ext-install pdo_mysql
RUN php -m
&& rm -rf redis-4.1.0 \
&& echo "extension=redis.so" > /usr/local/etc/php/conf.d/docker-php-ext-redis.ini \
&& docker-php-ext-install gd \
&& docker-php-ext-install zip \
&& docker-php-ext-install intl \
&& docker-php-ext-install mcrypt \
&& docker-php-ext-install exif \
&& docker-php-ext-install gettext \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install sockets \
&& apt-get purge --auto-remove -y \
wget \
&& apt-get purge --auto-remove -y \
zip
RUN apt-get clean \
&& rm -rf /var/lib/apt/lists/*
ADD . /GroupCo
WORKDIR /GroupCo
47 changes: 30 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,33 @@
[![Build Status](https://travis-ci.org/fucongcong/co-framework.svg?branch=master)](https://travis-ci.org/fucongcong/Group-Co)
[![Code Climate](https://codeclimate.com/github/fucongcong/co-framework/badges/gpa.svg)](https://github.com/fucongcong/Group-Co)

### 为什么写这个框架?
### 框架结构

框架其实分为两大板块, 协程客户端(BFF —— Backend For Frontend)与提供基础服务的服务端。(V2.0将升级支持多协议的服务端)

#### 客户端(BFF)
* 利用协程特性以同步方式来编写异步代码,增强可读性。
* 将swoole的异步特性与传统框架的MVC相结合。
* 可以用作api也可以用作http server,rpc server.
* 目前实现了以Zookeeper、Redis、Mysql为注册中心的服务化治理.
* 和nodejs类似,BFF端应该是胶水层(类似传统MVC的控制层),主要与前端交互输出(需要抗住大量的并发连接)

### 如何使用,与传统框架的区别?
#### 服务端
* 利用swoole的多进程模式创建,当前版本仅支持RPC调用。

#### 服务化
* 目前实现了以Zookeeper、Redis、Mysql为注册中心的服务化治理.
* 支持了Apollo的配置中心化
* 服务发现,客户端缓存、心跳检测、服务监听

* 框架基本使用与传统框架基本一致,路由,控制器,服务层,数据层。
### 如何使用协程客户端,与传统框架的区别?
* 框架基本使用与传统框架基本一致,路由,控制器,调用基础服务
* 在异步调用的地方需要以yield关键词来触发协程切换

#### 生产环境使用
### 为什么服务端不采用swoole的4.X版本协程?
* 业务码迁移方便。不使用协程,在原项目或者新项目微服务化时,可以无脑迁移,完全不用担心协程化导致的连接释放、全局变量问题等等诸多限制。
* 多进程模式可以将单连接请求速度优化,利用task机制
* 稳定性、已得到线上验证

### 生产环境使用
* GroupCo框架目前已经全线用于我们团队,日均处理请求百万次,基础服务调用耗时平均约为0.1ms

### 特性
Expand All @@ -43,7 +56,7 @@
* [环境依赖](doc/yin-yan/huan-jing-yi-lai.md)
* [启动项目](doc/yin-yan/qi-dong-xiang-mu.md)
* [Docker容器启动](doc/yin-yan/docker.md)
* 异步服务
* 客户端
* [异步Tcp客户端](doc/kuang-jia-fu-wu/yi-bu-tcp-ke-hu-duan.md)
* [异步WebSocket客户端](doc/kuang-jia-fu-wu/yi-bu-websocket-ke-hu-duan.md)
* [异步Http客户端](doc/kuang-jia-fu-wu/yi-bu-http-ke-hu-duan.md)
Expand All @@ -52,6 +65,12 @@
* [异步Log日志](doc/kuang-jia-fu-wu/yi-bu-log.md)
* [异步文件读写](doc/kuang-jia-fu-wu/yi-bu-wen-jian-du-xie.md)
* [异常Exception](doc/kuang-jia-fu-wu/yi-chang-exception.md)
* 服务端\(用于基础服务开发\)
* [Service](doc/tong-bu-fu-wu/service.md)
* [Dao](doc/tong-bu-fu-wu/dao.md)
* [Cache](doc/tong-bu-fu-wu/rediscache.md)
* [Log日志类](doc/tong-bu-fu-wu/logri-zhi-lei.md)
* [FileCache文件缓存类](doc/tong-bu-fu-wu/filecachewen-jian-huan-cun-lei.md)
* 服务中心
* [服务治理流程](doc/fu-wu-zhong-xin/fu-wu-zhi-li-liu-cheng.md)
* [注册中心](doc/fu-wu-zhong-xin/zhu-ce-zhong-xin.md)
Expand All @@ -62,7 +81,7 @@
* [调试模式](doc/fu-wu-zhong-xin/diao-shi-mo-shi.md)
* 配置中心
* [配置中心的使用](doc/pei-zhi-zhong-xin/shi-yong.md)
* 基础服务
* 框架基础类
* [Config配置类](doc/ji-chu-fu-wu/config.md)
* [StaticCache静态缓存类](doc/ji-chu-fu-wu/staticcache.md)
* [Route路由类](doc/ji-chu-fu-wu/routelu-you-lei.md)
Expand All @@ -74,12 +93,6 @@
* [Listener监听类](doc/ji-chu-fu-wu/listenerjian-ting-lei.md)
* [Subscriber多事件监听](doc/ji-chu-fu-wu/subscriberduo-shi-jian-jian-ting.md)
* [EventDispatcher事件调度](doc/ji-chu-fu-wu/eventdispatchershi-jian-diao-du-lei.md)
* 同步服务\(用于服务开发\)
* [Service](doc/tong-bu-fu-wu/service.md)
* [Dao](doc/tong-bu-fu-wu/dao.md)
* [Cache](doc/tong-bu-fu-wu/rediscache.md)
* [Log日志类](doc/tong-bu-fu-wu/logri-zhi-lei.md)
* [FileCache文件缓存类](doc/tong-bu-fu-wu/filecachewen-jian-huan-cun-lei.md)
* [单元测试](doc/dan-yuan-ce-shi/dan-yuan-ce-shi.md)
* [控制台](doc/kong-zhi-tai/kong-zhi-tai.md)

Expand All @@ -93,8 +106,8 @@
### BUG反馈
如果你在使用过程中遇到安全或者框架层面使用bug,请提issue。

### 理想的架构模型
- [架构选型](doc/fu-wu-zhong-xin/jiagou.md)
### 架构模型
- [架构模型](doc/fu-wu-zhong-xin/jiagou.md)

### 与Go的协程的区别
基于Swoole的异步与php的Generator实现的异步协程,而go语言是内置协程,这是本质上的区别
基于Swoole的异步与php的Generator实现的异步协程,而go语言是内置协程。
47 changes: 0 additions & 47 deletions doc/fu-wu-zhong-xin/jiagou.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,2 @@
#### 网关层
特点:最外层网关需要高性能、支持高并发。

- Go语言实现Gateway,方便定制
- Kong(nginx+lua基于nginx)
- Traefik(Go实现的,性能不如nginx)

#### 服务聚合层
特点:需要快速开发应对外部业务的多变,调用基础服务即可。io较密集,建议使用异步框架。

- GroupCo (php的异步协程框架,php的快速开发与异步协程的支持并发)

#### 基础服务层
特点:基础服务要求稳定,严谨。使用RPC/Http与上层通信

- GroupCo(内置RPC,php开发快)
- [GroupCo-java](https://github.com/fucongcong/GroupCo-java) (java实现的服务层,更严谨,低耦合)

#### 日志分析

- ELK(开箱即用)

#### 配置中心

- GroupCo内置[APOLLO](https://github.com/ctripcorp/apollo)

#### 服务发现

- 基于Zookeeper
- 基于Redis
- 基于Mysql

#### 分布式队列

- 基于Redis
- Kafaka
- Beanstalk
- Rabbitmq
- RocketMQ

#### 分布式任务调度

#### 自动化部署发布

- CI
- jenkins

#### 流程图
![](/service.png)
10 changes: 3 additions & 7 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ services:
volumes:
- .:/GroupCo
- .:/var/www/GroupCo
stdin_open: true
tty: true
redis:
restart: always
image: "redis:alpine"
Expand Down Expand Up @@ -38,10 +40,4 @@ services:
# MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
# MYSQL_USER: cm
# MYSQL_PASSWORD: 123
# MYSQL_DATABASE: Demo
# adminer:
# image: adminer
# restart: always
# ports:
# - 8086:8086

# MYSQL_DATABASE: Demo

0 comments on commit 4aeb9bd

Please # to comment.