' => [
'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