swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 786 forks source link

swoft 2.0 开发意见收集 #498

Closed inhere closed 5 years ago

inhere commented 5 years ago

swoft 2.0 开发意见收集

鉴于1.0的规划过于庞大,一些组件其实很少人使用,开发团队感觉维护困难。

决定开发2.0:

这里做一些意见收集

去除的功能:

需改进的功能:

新增的功能:

inhere commented 5 years ago

先收集意见,下周估计开始规划

yanwuguangjun commented 5 years ago

有这么几个想法:(可能意义不大)

  1. 希望能从现今的版本比较平滑的迁移到2.0版本;

2.数据库ORM方面希望能够增加对json 类型的支持;

3.能够更好的处理生命周期逻辑(其实现在也已经很好了,可能是文档没吃透)

4.注解的类提示上可以再友好点(原谅技术太渣很多东西只能靠提示来弥补)

inhere commented 5 years ago

@yanwuguangjun 我在这再回复下 :)

  1. 平滑迁移的可能性不大,2.0 出来后,看情况
  2. 这到得看时间了... 有兴趣的话,可以贡献
  3. 有啥发现的问题,可以向我们提
  4. 类提示靠的是IDE插件 😄
xnnyeYp commented 5 years ago

希望能够支持mongodb协程客户端,类似mysql。还有就是我们公司在使用过程中发现,水平较为初级的开发者认为文档较为难懂,不是很详细,个人认为文档如果能更易懂详细的话,更利于框架的推广吧

wslinging commented 5 years ago

希望重点优化mysql数据库还有redis在协程下的使用体验。这是我最希望有的改进

inhere commented 5 years ago

希望能够支持mongodb协程客户端,类似mysql。还有就是我们公司在使用过程中发现,水平较为初级的开发者认为文档较为难懂,不是很详细,个人认为文档如果能更易懂详细的话,更利于框架的推广吧

AoeSyL commented 5 years ago

希望增加对log的优化 mongo的支持 还有队列呀 队列 注解的文档 如果可以的话 能完善下 就更好啦~~~

sakuraovq commented 5 years ago

可以考虑 对 graphql 的支持

dusong0717 commented 5 years ago

说说我们现在的项目使用的技术: 数据库:mongodb、mysql 缓存:redis 搜索引擎:elasticsearch 队列:beanstalk、kafka、rabbitmq

需要满足基本使用这些,基本都是很常用的都能满足就可以很好使用了,考虑第三方composer包怎么使用,demo文档更详细一点,希望demo能有点业务逻辑代码,比如,mysql查询数据、redis获取数据、操作业务,API接口栗子,单元测试,代码调试监控进程状态,如果有日志管理就更好了,可以基于swoft开发项目壮大社区,这样更容易理解,毕竟新手很多,了解理解协程、异步、进程、线程这些网络IO这些复杂度就上升了,希望体验度要和传统的fpm框架无差异,这样社区才能壮大,来自本人理解,不对的地方,请谅解哈。

mlsjla commented 5 years ago

swoft-cli生成项目,建议可以替换swoft关键词,可以由开发者自定义关键词。并非不尊重版权云云,是希望swoft更加开放。

如我们开发商业产品,如产品源码大量出现swoft关键词对商业产品有不好影响。 这点beego之类框架做得很好都做得不错

inhere commented 5 years ago

swoft-cli生成项目,建议可以替换swoft关键词,可以由开发者自定义关键词。并非不尊重版权云云,是希望swoft更加开放。

如我们开发商业产品,如产品源码大量出现swoft关键词对商业产品有不好影响。 这点beego之类框架做得很好都做得不错

没明白,你是说 swoft-cli 这个名字吗? 还是说框架的代码里有Swoft关键字?

mlsjla commented 5 years ago

@inhere

实际上依赖文件内swoft关键词没啥。

如下启动脚本关键词对于开发商业软件还是介意的。 当然也可以自己麻烦下去改, 不过还是希望swoft-cli创建项目的时候本身就集成了修改的功能

// Start HTTP Server php bin/swoft start

// Start Daemonize HTTP Server php bin/swoft start -d

// Restart HTTP server php bin/swoft restart

// Reload HTTP server php bin/swoft reload

// Stop HTTP server php bin/swoft stop

inhere commented 5 years ago

bin/swoft 这个吗? 只是个入口文件 你可以随便命名的

tw2066 commented 5 years ago

最近使用swoft1.0 , ab压力测试了一下,性能和其他swoole框架比较起来, 相差较大; 希望在2.0 能对性能方面有提高

TengYun-ty commented 5 years ago

最近使用swoft1.0 , ab压力测试了一下,性能和其他swoole框架比较起来, 相差较大; 希望在2.0 能对性能方面有提高

能具体说明下对比的框架是哪个么?

tw2066 commented 5 years ago

最近使用swoft1.0 , ab压力测试了一下,性能和其他swoole框架比较起来, 相差较大; 希望在2.0 能对性能方面有提高

能具体说明下对比的框架是哪个么?

使用vm虚拟机测试:配置1核1G swoole=4.2.10 worker_num=1 测试命令:ab -n 10000 -c 1000 url easyswoole 3.0.9: Benchmarking 192.168.22.134 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests

Server Software: EasySwoole Server Hostname: 192.168.22.134 Server Port: 9501

Document Path: /test Document Length: 21 bytes

Concurrency Level: 1000 Time taken for tests: 4.516 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1690000 bytes HTML transferred: 210000 bytes Requests per second: 2214.50 [#/sec] (mean) Time per request: 451.570 [ms] (mean) Time per request: 0.452 [ms] (mean, across all concurrent requests) Transfer rate: 365.48 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.8 0 8 Processing: 241 426 55.8 439 513 Waiting: 156 415 64.0 431 510 Total: 241 426 55.9 440 513 swoft1.0.8:(关闭日志,命令行输出) Benchmarking 192.168.22.134 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests

Server Software: swoole-http-server Server Hostname: 192.168.22.134 Server Port: 9988

Document Path: /hi/index Document Length: 5 bytes

Concurrency Level: 1000 Time taken for tests: 6.734 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2240000 bytes HTML transferred: 50000 bytes Requests per second: 1484.95 [#/sec] (mean) Time per request: 673.426 [ms] (mean) Time per request: 0.673 [ms] (mean, across all concurrent requests) Transfer rate: 324.83 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.0 0 8 Processing: 51 657 152.3 680 850 Waiting: 51 518 137.8 530 831 Total: 52 658 152.4 681 851 WARNING: The median and mean for the initial connection time are not within a normal deviation These results are probably not that reliable.

Percentage of the requests served within a certain time (ms) 50% 681 66% 733 75% 750 80% 761 90% 792 95% 835 98% 846 99% 847 100% 851 (longest request)

mixphp: Benchmarking 192.168.22.134 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests

Server Software: swoole-http-server Server Hostname: 192.168.22.134 Server Port: 9966

Document Path: / Document Length: 29 bytes

Concurrency Level: 1000 Time taken for tests: 3.355 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1990000 bytes HTML transferred: 290000 bytes Requests per second: 2980.58 [#/sec] (mean) Time per request: 335.505 [ms] (mean) Time per request: 0.336 [ms] (mean, across all concurrent requests) Transfer rate: 579.23 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.6 0 6 Processing: 89 317 55.7 319 421 Waiting: 89 275 55.0 278 416 Total: 89 317 55.8 319 421

Percentage of the requests served within a certain time (ms) 50% 319 66% 337 75% 351 80% 357 90% 368 95% 394 98% 406 99% 412 100% 421 (longest request)

mlsjla commented 5 years ago

我本机测试了下, mac15款 I5+8G内存, 开了一堆程序。

swoole原生测试8000Requests per secon

easyswoole 测试大概是5000 swoft 测试4000多

以上测试都是hello测试 AB测试

inhere commented 5 years ago

@tw2066 @mlsjla 2.0 会优化的,流程会理清晰后再做开发

tanpeng commented 5 years ago

也简单ab压测了下easyswoole,swoft。关闭日志,debug,开启1个worker,仅输出hello world。 easyswoole:swoft 大概 1650:1200,有些差距。 但是喜欢swoft。所以,还是非常期待swoft 2.0的。 加油!!!

studyzhanglei commented 5 years ago

MongoDB连接池支持,github上开源的基本上很少~

aprchen commented 5 years ago

之前开发1.0组件的时候,有遇到过循环调用,导致coredump,排查起来非常困难,希望2.0可以把这一点在底层屏蔽掉,再就是swoole底层错误,和框架错误的日志风格不统一,后期采集比较困难,跑多进程任务的时候,框架内部出错,提示的日志信息无法定位错误点

AmdRyZen commented 5 years ago

@tw2066 @mlsjla 2.0 会优化的,流程会理清晰后再做开发

其实应该是 简介化 性能优先 对比mixPHP 性能差的更多 使用swoole的 一般都是对新技术比较喜欢 切数据安全要求不高的项目 性能更有说服力。。。学swoft和学spring一样就没必要 有哪样的项目 也不会选择PHP 和 swoft框架 ,大部分公司负责人 都不敢把核心项目方在swoole上跑

inhere commented 5 years ago

@AmdRyZen 所以我们朝着这个方向努力啊,出一个能支撑大项目的框架

tw2066 commented 5 years ago

@inhere 支持支持,期待2.0发布

to2false commented 5 years ago

配置部分:

inhere commented 5 years ago

配置部分:

  • 一些组件默认env覆盖config配置项,不是很直观,可以将这个操作改成只从config文件里读取,config里通过env获取覆盖?

嗯 这个部分会去掉,应用里面默认都从 config 取配置

jqhph commented 5 years ago

对新技术比较喜欢 切数据安全要求不高的项目 性能更有说服力。。。学swoft和学spring一样就没必要 有哪样的项目 也不会选择PHP 和 swoft框架 ,大部分公司负责人 都不敢把核心项目方在swoole上跑

既然基于swoole性能方面就不需要太担心。框架稳定和易用这个是最最重要的,swoft应该着重在这方面下功夫。

no-serve-people commented 5 years ago

希望swoft 2.0提供类似于php artisan vendor:publish 这种命令,便于发布vendor扩展包下的配置文件,比如我要使用devtool这个包时,可以通过发布配置文件到config目录,然后可以自定义配置文件,生成符合项目需求的配置文件。比如 image这种头文件信息,可以通过自定义配置文件配置。

tanpeng commented 5 years ago

希望swoft2.0连接池,能够支持多个负载服务地址,指定获取某个地址的连接功能。 需求其实主要是针对rpc这块,目前有些应用场景,对应多个rpc-server,希望能够定向分配一个server(比如用户登录成功后固定分配某一个server)。 目前1.0是按照连接池配置、服务写死的,有了这个功能,我想可以做到rpc-server动态上下线。

panyongwei commented 5 years ago

希望swoft 2.0提供类似于php artisan vendor:publish 这种命令,便于发布vendor扩展包下的配置文件,比如我要使用devtool这个包时,可以通过发布配置文件到config目录,然后可以自定义配置文件,生成符合项目需求的配置文件。比如 image这种头文件信息,可以通过自定义配置文件配置。

目前这部分可以通过修改头配置文件实现,可以看一下:https://doc.swoft.org/master/zh-CN/devtool/gen-commands.html

Super-Boom commented 5 years ago

用ci用久了,发现这个有点难学,希望文档再详细一点,加油😊

minbaby commented 5 years ago

比较关心 2.0 是否是一个不兼容更新,如果是,那么是否会提供详细的升级说明

alukaa commented 5 years ago

我觉得http server 部分舍弃view部分,只提供api接口功能就够了

inhere commented 5 years ago

我觉得http server 部分舍弃view部分,只提供api接口功能就够了

嗯 view 一直是可选的

inhere commented 5 years ago

比较关心 2.0 是否是一个不兼容更新,如果是,那么是否会提供详细的升级说明

这个到时要考虑下

abnereel commented 5 years ago

希望文档能丰富一些

brewlin commented 5 years ago

希望能更加安全和注意细节 97404667 邮箱97404667@qq.com 签名由 网易邮箱大师 定制 在2019年01月23日 17:21,拾年磨一剑 写道: 希望文档能丰富一些 — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

shulinqian commented 5 years ago

我能提个过分的需求么 强烈建议支持 https://github.com/alibaba/fescar 解决数据一致性一直很头痛。。。要撸巨多修复代码,能支持fescar或者GTS这种分布式事务框架就好了。微服务话才能轻松进行

dobyte commented 5 years ago

swoft中间件希望能够像laravel的中间件一样可以实现传参,现在的中间件实用性不高

inhere commented 5 years ago

swoft中间件希望能够像laravel的中间件一样可以实现传参,现在的中间件实用性不高

传参 指的是提前new出中间件对象,设置一些东西吗?

php-lsys commented 5 years ago

微核心,把所有的功能都组件化.

php-lsys commented 5 years ago

线程池管理类 跟 线程池基类为什么要混在一块.

php-lsys commented 5 years ago

对于event log pipe pool proxy Validator 甚至APP都可以组件化.

php-lsys commented 5 years ago

极其讨厌 注解 方式写代码. 为什么不能像 symfony提供两种方式?

inhere commented 5 years ago

极其讨厌 注解 方式写代码. 为什么不能像 symfony提供两种方式?

工作量太大 😄 不喜欢注解可以用 easyswoole imi mixphp 等基于swoole的框架

shanliu commented 5 years ago

连接池可以抽离出来 连接池包 数据库连接池包 redis连接池包 .... 按需在composer中引入 默认框架可以引入部分 然后其他人有需要在不用这框架也可以引入使用

to2false commented 5 years ago

关于项目初始化提供的大量例子,我觉得全部移至文档或一个demo repo,保持初始化最简单

inhere commented 5 years ago

关于项目初始化提供的大量例子,我觉得全部移至文档或一个demo repo,保持初始化最简单

2.0 的初始化项目结构会保持最精简的 同时会提供一些含有其他demo的初始化repo

layasugar commented 5 years ago

image 是否考虑socket增加心跳机制和分组

inhere commented 5 years ago

这个配置是 swoole 就提供了的啊