From 6970bf07bdd70d6d463ab137c602015454d1e790 Mon Sep 17 00:00:00 2001 From: fucongcong Date: Fri, 3 Jul 2020 10:04:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0,v2.0?= =?UTF-8?q?=E9=A2=84=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 70 +++++++++++++++++++---------------- README.md | 47 ++++++++++++++--------- doc/fu-wu-zhong-xin/jiagou.md | 47 ----------------------- docker-compose.yml | 10 ++--- 4 files changed, 71 insertions(+), 103 deletions(-) diff --git a/Dockerfile b/Dockerfile index b1d7165..f588ce4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/README.md b/README.md index 0a4612f..818dd90 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,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 ### 特性 @@ -42,7 +55,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) @@ -51,6 +64,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) @@ -61,7 +80,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) @@ -73,12 +92,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) @@ -92,8 +105,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语言是内置协程。 diff --git a/doc/fu-wu-zhong-xin/jiagou.md b/doc/fu-wu-zhong-xin/jiagou.md index ed7d90f..2b8ad75 100644 --- a/doc/fu-wu-zhong-xin/jiagou.md +++ b/doc/fu-wu-zhong-xin/jiagou.md @@ -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) diff --git a/docker-compose.yml b/docker-compose.yml index e354ff9..fe9f814 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,8 @@ services: volumes: - .:/GroupCo - .:/var/www/GroupCo + stdin_open: true + tty: true redis: restart: always image: "redis:alpine" @@ -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 \ No newline at end of file