本文目录导航:
- Elasticsearch环境安装与 php 对接使用
- 安装与配置
- Laravel对接
- 官方扩展的使用
- PHP工作5来的ES都没完过,PHP从0到熟练,手把手带你玩转ES的骚操作
- php如何做微服务?
Elasticsearch环境安装与 php 对接使用
Elasticsearch是一个强大且灵活的全文搜索和数据分析工具,它支持分布式、高实时的特性,通过RESTful接口提供多用户服务。
它基于Java开发,开源且广泛应用于云计算场景,以Java、、PHP、Python等语言提供官方客户端。
本文主要讲解在Windows环境下安装及与PHP的对接使用过程。
安装与配置
以8.4版本的Elasticsearch为例,确保使用的composer包版本匹配。
初次运行可能会遇到SSL和密码认证问题,需要编辑config目录下的文件进行配置。
成功配置后,通过访问127.0.0.1:9200验证安装是否成功。
该插件需要支持,可以从GitHub下载源代码并运行,通过访问查看数据管理界面。
Laravel对接
以Laravel 9为例,使用scout包进行全文搜索,通过composer安装babenkoivan/elastic-scout-driver。
配置scout驱动为es,并在laravel模型中操作Elasticsearch,模型数据同步功能会在CRUD操作时自动进行。
如果已有数据库数据,可通过laravel模型的search方法导入ES,操作方式与常规模型类似。
官方扩展的使用
下载并确保composer中elasticsearch/elasticsearch扩展版本与Elasticsearch安装包匹配。
在env配置文件中添加ELASTIC_HOST为127.0.0.1:9200,创建EsServiceProvider并注册到config/,即可开始在Laravel中正常使用Elasticsearch服务。
PHP工作5来的ES都没完过,PHP从0到熟练,手把手带你玩转ES的骚操作
准备ES:了解并查看Elasticsearch的PHP API文档。
安装操作Elasticsearch的PHP库:在搜索Elasticsearch并下载对应版本的库。
PHP连接Elasticsearch:参照官方配置文档进行。
创建索引和映射:创建名为users的索引并制定映射中的字段类型。
添加文档:使用关联数组传递JSON文档至Elasticsearch。
单一文档索引:提供ID或让Elasticsearch自动生成ID索引文档。
批量(bulk)索引:使用bulk API批量索引文档。
获取文档:通过index/type/id方式实时获取文档。
更新文档:部分更新时合并指定的doc参数,或执行脚本更新。
删除文档:指定路径删除指定的文档。
php如何做微服务?
Jin-microservices基于 php 语言 + hyperf 微服务 框架的完整微服务demogithub/Double-Jin//ljj96/jin-mic...作为php、go双修的开发者,go语言的微服务体系已经基本掌握,go语言相关的微服务的文章、开源项目在网上搜索一搜一大堆,这让会go语言的开发者能容易地上手并实现微服务,毕竟go语言是除java外最合适做微服务的语言这一。
php语言的优势在于web生态,开发的应用绝大多数为单体应用架构。
近年来随着基于swoole扩展的hyperf框架的出现,让php也能开发微服务架构,这里要感谢开源工作者。
但用php + 微服务作为关键词时,搜索出来的文章、开源项目都是一些简单的案例,开发者并不能通过这些简单的案例来了解微服务,这让我有了想写本项目的原始动力。
JM是基于php语言 + hyperf微服务框架编写的完整微服务demo,与网上能找到的单一功能点简单实现的文章不同,JM从实际项目需求出发,力求做到git clone项目下来后对着文件就能帮你构建微服务完整的知识体系,让你实际用hyperf开发微服务项目时能粘贴复制本项目的代码。
微服务架构并不是比单体架构先进的架构,只是在项目体量、项目开发者人数达到一定量级后的一种选择。
切勿盲目鼓吹微服务,在团队开发、运维能力不足的情况下强行推进微服务架构恐怕会适得其反。
下面提到的组件并不是微服务架构才能使用,如elk、nacos、dtm这些,在单体应用里面也有合适的场景用到,取其精华来满足业务上的需要。
如在生产上用到这些组件最好选择编译安装或购买云服务微服务是把单体应用进行分拆后的架构,分拆后带来的问题通过引用第三方组件来解决,安装部署这些组件的时候你将会遇到很多奇奇怪怪的问题。
为减低难度,本项目大部分组件采用docker来安装,整体流程我已在不同的电脑上验证数遍,即便如此还是会存在如composer、github、http/tcp访问、端口、内存、docker版本等问题,同样的操作换了台电脑就可能出问题,这需要你跟据报错内容查找相关资料自行解决。
当系统变为集群后,应用日志在数十台甚至是上百台不同的服务器上,能实现日志的统一查找、分析和归档等功能便可称为分布式日志系统。
生产上方案会有很多,如将日志直接输出来Elasticsearch,如使用云服务商提供的日志收集。
本案例采用的是通过filebeat将日志同步到ELK中。
数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。
但对分布式系统来说,数据的操作来自多个不同的数据库,单个数据库事务的成功或失败不代表整个系统的数据一致性是对的,只能够通过分布式事务来解决。
分布式事务就是指事务的发起者、资源及资源管理器和事务协调者分别位于分布式系统的不同节点之上。
行业上常用的有二阶段提交、SAGA、TCC等方案,当了解原理后,你自行用http/tcp也能实现二阶段提交、SAGA、TCC。
下面的接口通过DTM调度实现在一个SAGA案例。
分布式事务不足感谢
评论(0)