DreamFactory是一个基于php的应用程序,我们在每一个机会努力优化代码,性能主要是由决策在基础设施水平。幸运的是,这些决定与其说是由预算通过声音技术和主机的选择。虽然DreamFactory环境无疑会更加性能例如一个AWS t2。大比15美元数字海洋飞沫,可以大大降低两者之间的鸿沟,是小心正确配置和调优环境。在这一章我们将提供一些一般性的性能基准,然后提供指导如何确保DreamFactory实例运行在高峰容量。
性能基准测试
下表给出DreamFactory的平均响应时间与托管平台在各种受欢迎的托管解决方案。在每种情况下承载环境修改的,而不是以任何方式优化。然而重要的是要注意所有运行PHP 7.2, NGINX, PHP-FPM。
环境 | 负载和API类型 | 平均响应时间 |
---|---|---|
15美元数字海洋飞沫 | 10 MySQL API请求/秒(10记录) | 2524毫秒 |
15美元数字海洋飞沫 | 启用了缓存的10 MySQL API请求/秒(10记录) | 101 ms(提高96%) |
15美元数字海洋飞沫 | 启用了缓存的10 MySQL API请求/秒(100条记录) | 145毫秒 |
AWS t2.large | 50 MySQL API请求/秒(100条记录) | 83毫秒 |
AWS t2.large | 启用了缓存的50 MySQL API请求/秒(100条记录) | 72 ms(提高13.3%) |
AWS t2.large | 100 MySQL API请求/秒(100条记录) | 85毫秒 |
AWS t2.large | 100年启用了缓存的MySQL API请求/秒(100条记录) | 73 ms(提高14.2%) |
AWS t2.large | 10 S3 API JPEG文件请求/秒 | 198毫秒 |
AWS t2.large | 10 MySQL API请求/秒(1000条记录) | 281毫秒 |
AWS t2.large | 启用了缓存的10 MySQL API请求/秒(1000条记录) | 264 ms(提高7.2%) |
这些负载测试使用第三方负载测试服务Loader.io。。
最明显的结论是,启用数据库缓存可以对性能有巨大影响的事件你运行DreamFactory低功率的服务器上。更强大的服务器环境的影响并不明显,不过都是一样的在AWS上启用缓存t2。大型生产平均上面列举的场景的性能提升了11.6%。那么你还能做些什么来提高性能?
优化DreamFactory的数据库api
确保DreamFactory-generated数据库api在高峰运行性能是通过确保正确配置数据库,已分配适当的硬件和网络资源,打开DreamFactory的数据库缓存功能。万博手机登录平台在这一节中我们将进一步讨论所有这些任务。
索引数据库
对数据库支持的api,没有更有效的任务可能需要比正常索引数据库。数据库索引是允许数据库引擎快速识别哪些行定义的匹配条件在哪里
条款。请参考以下资源通用和特定于数据库的索引信息:万博手机登录平台
数据库API的缓存
启用数据库API的缓存每当实用,因为它无疑会提高性能。
DreamFactory实例可能是负载均衡,可以配置为共享系统数据库,缓存的细节,和其他信息需要在分布式环境中运行。以下是一些链接,可以帮助您配置一个负载均衡器与一些最常见的云提供商。
DreamFactory使文件的默认缓存,但是您可能会选择配置的另一个支持缓存解决方案,如复述。请查看这些链接看到连接教程:
添加复述,缓存
DreamFactory最大的优势是Laravel之上构建的,因此,您可以利用Laravel对共享缓存解决方案的支持,等等。这是伟大的,因为它意味着缓存解决方案进行了广泛的测试和证明在生产环境中。万博max手机网页登录
安装predis包你只需要导航到您的项目的根目录并执行这个命令:
美元需要predis / predis作曲家
接下来,打开你的.env文件,寻找这一节:
# CACHE_DRIVER选项:apc、数组、数据库文件,memcached,复述,CACHE_DRIVER =文件改变CACHE_DRIVER: CACHE_DRIVER =复述
接下来,向下滚动并取消删除这些行#
,然后更新CACHE_HOST
,CACHE_PORT
,(可选)CACHE_PASSWORD
参数匹配您的复述,环境:
#如果CACHE_DRIVER = memcached或复述,# # CACHE_PORT CACHE_HOST = = # CACHE_PASSWORD =
最后,向下滚动到下一节和取消CACHE_DATABASE
和REDIS_CLIENT
:
#如果CACHE_DRIVER =复述,# CACHE_DATABASE = 2 #复述,客户机使用:predis或phpredis # REDIS_CLIENT = predis (PHP扩展)
你可以把CACHE_DATABASE
设置为2。为REDIS_CLIENT
你可以把它设置为predis如果你安装了predis / predis包(推荐)。默认情况下复述,数据库将在0,所以一定要选择
不管数量是你设置CACHE_DATABASE
等于。然后你可以看到键
填充。
负载平衡DreamFactory环境
您可以使用一个负载均衡器在多个服务器之间分配API请求。负载平衡器还可以执行健康检查和消除不健康的服务器自动从池中。大多数大型服务器架构在整个基础设施包括负载平衡器在几个点。你可以集群负载平衡器,以避免单点故障。DreamFactory是专门设计来处理负载平衡器和所有的各种调度算法。REST API请求可以发送到web服务器在任何时间和任何一个无状态的方式处理。
下图描绘了一个典型的负载均衡、高可用性环境。像许多基于http的应用程序,DreamFactory可以扩展使用三层架构:
- 应用层:这些服务器运行一个或多个DreamFactory实例。
- 缓存层:如果负载平衡DreamFactory跨多个服务器,您将需要使用一个高速缓存解决方案为分布式缓存管理如复述或Memcached。
- 数据库层:在负载均衡环境DreamFactory系统数据库需要跨实例共享。您可以使用MySQL、PostgreSQL或Microsoft SQL Server。
编译与OPcache DreamFactory代码
你可以通过编译实现特别高的性能使用OPcache DreamFactory应用程序代码。以下
第三方资源万博手机登录平台
- “NGINX食谱:先进的高性能负载平衡食谱”:这175页的指南提供了关于NGINX扩展深入和具体的解决方案。
- Amazon EC2成本计算器:这个计算器可以帮助你浏览AWS的臭名昭著的不透明的EC2实例定价模型。
结论
这些只是一些小技巧旨在帮助您确保DreamFactory环境运行在峰容量!如果你有其他想法,请寄给在dreamfactory.com代码!