设为首页 加入收藏

TOP

PHP 并发方案建议(三)
2023-07-23 13:26:14 】 浏览:177
Tags:PHP 方案建
' => [ 'username' => '用户名', 'password' => '密码', 'attributes' => [ // use a smaller connection timeout PDO::ATTR_TIMEOUT => 10, ], ], 'slaves' => [ ['dsn' => 'mysql:host=备库IP地址;dbname=数据库名'], ], ];
点击查看代码
$db = Yii::$app->db;
$db->setMaster(true); // 使用主库进行写操作
$model->save();
$db->setMaster(false); // 使用备库进行读操作
$data = $model->find()->asArray()->all();

  • 读写分离:读写分离是指将读和写操作分离到不同的数据库中,可以提高数据库的性能和稳定性。PHP 框架 ThinkPHP 中支持读写分离。
点击查看代码
// 主库配置
'db_config' => [
    'type'     => 'mysql',
    'hostname' => 'localhost',
    'database' => 'mydatabase',
    'username' => 'root',
    'password' => '123456',
    'hostport' => '3306',
    'params'   => [
        \PDO::ATTR_PERSISTENT => true,
    ],
],

// 从库配置
'db_config_read' => [
    'type'     => 'mysql',
    'hostname' => 'localhost',
    'database' => 'mydatabase',
    'username' => 'readonly',
    'password' => 'readonlypwd',
    'hostport' => '3306',
    'params'   => [
        \PDO::ATTR_PERSISTENT => true,
    ],
],

点击查看代码
use think\db\Connection;

class Db extends Connection
{
    public function __construct($config = [])
    {
        if (isset($config['is_master']) && $config['is_master'] === true) {
            $this->connect($config);
        } else {
            $this->connect($config, true);
        }
    }
}

点击查看代码
use app\common\model\User;
use app\common\model\Db;

// 连接主库
$userModel = new User(new Db(config('db_config', [], false)));

// 连接从库
$userModel = new User(new Db(config('db_config_read', [], false)));

  • 多数据中心:多数据中心是指将数据分布在多个地理位置的数据中心中,可以提高数据的可用性和可靠性。PHP 框架 Symfony 中支持多数据中心架构。
    方案一:使用Doctrine ORM框架以及其提供的分布式事务支持。通过使用分布式事务,可以在多个数据中心之间实现数据的同步和一致性。此外,可以使用Symfony的事件和消息系统,实现跨数据中心的异步通信。
    方案二:使用Symfony Messenger组件,该组件提供了一个灵活的消息传递系统。可以使用该组件来实现数据的异步同步和处理。同样地,可以通过事件和消息传递来实现跨数据中心的通信。

10,安全架构设计

1),身份认证:使用 PHP 语言和框架(如 Laravel 或 Yii2)实现基于角色的访问控制(RBAC)系统,包括用户登录、注册、找回密码等功能,使用加盐哈希加密用户密码,保护用户隐私。

基于 session 的身份认证:通过保存用户的认证状态信息在服务器端的 session 中,判断用户是否已经登录。通常会在登录时设置 session,注销时删除 session。
基于 cookie 的身份认证:通过将用户的认证状态信息保存在客户端的 cookie 中,判断用户是否已经登录。与 session 方式相比,可以减轻服务器的压力,但需要注意 cookie 安全问题。
基于 token 的身份认证:通过给用户分配一个唯一的 token,用于标识用户身份和验证用户身份。通常会在用户登录时生成 token,并在后续的请求中携带 token 进行身份验证。
基于 OAuth2.0 的身份认证:OAuth2.0 是一种授权协议,可以用于实现第三方授权登录。用户可以通过第三方应用程序进行登录认证,同时保护用户的隐私和安全。
基于 OpenID Connect 的身份认证:OpenID Connect 是一种基于 OAuth2.0 的身份认证协议,可以用于实现单点登录和用户身份认证。用户可以通过 OpenID Connect 进行跨应用程序的身份认证。
基于 SAML 的身份认证:SAML 是一种基于 XML 的身份认证协议,可以用于实现企业间的单点登录和用户身份认证。用户可以通过 SAML 进行跨组织的身份认证。

实例:

a,CAS(Central Authentication Service):一个开源的单点登录协议和实现,它通过一个中心认证服务器来认证用户身份,其他系统可以通过 CAS 客户端库来与 CAS 服务器进行交互。
1.安装phpCAS客户端》》2.配置CAS客户端》》3.CAS登录验证》》4.CAS注销

点击查看代码
//1.安装phpCAS客户端
composer require jasig/phpcas
//2.配置CAS客户端
phpCAS::client(CAS_VERSION_2_0, 'cas.server.com', 443, 'cas');
phpCAS::setNoCasServerValidation();
//其中:
//CAS_VERSION_2_0表示使用CAS2.0协议进行认证。
//cas.server.com是CAS服务器的域名或IP地址。
//443是CAS服务器的端口号。
//cas是CAS服务器的上下文路径。
//se
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP实现动态修改.env文件配置(适.. 下一篇浅谈PHP设计模式的中介者模式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目