首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >内容审核实践 | 即时通讯 IM 场景

内容审核实践 | 即时通讯 IM 场景

作者头像
云存储
发布于 2021-09-28 01:42:16
发布于 2021-09-28 01:42:16
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

一、概述

一些用户使用即时通信 IM 产品开发实现自己的聊天业务,但对于聊天之间的消息无法很好的去管控内容是否违规。

基于数据万象 CI ,对象存储 COS 推出的内容审核功能,可以帮助用户实现IM消息的审核服务,在发送出来的消息是违规内容时,不允许发送(先审后发)。

整体流程可看下图:

内容审核的处理主要在步骤6、7、8。

步骤6:发送审核请求对消息内容进行审核。

步骤7:返回处理结果。

步骤8:根据结果判断是否发送消息或是否撤回、删除消息。

实际聊天效果如下图:

二、准备工作

(一)即时通信IM 简单DEMO

【Demo入门】一分钟跑通Demo:

 https://cloud.tencent.com/document/product/269/36838

IM SDK地址:

https://cloud.tencent.com/document/product/269/36887

按照文档说明登陆获取SDKAppID及密钥信息创建应用下载DEMO源码配置密钥编译运行(部分平台需要)

本文例子使用Web&H5,修改GenerateTestUserSig.js 文件配置密钥后,无需编译,可直接访问dist/index.html

如:http://127.0.0.1/timSdkH5Demo/dist/index.html   替换服务器地址后可以直接访问,timSdkH5Demo 为代码目录,可按需修改。

访问后显示如下页面,可下拉选择用户登陆,两个用户登陆不同账号即可实现聊天功能。

(二)IM 配置项

登录 即时通信 IM 控制台—回调配置  

回调URL配置 >> 编辑:填写回调URL后确认保存。具体回调参数及说明可访问 第三方回调简介 。

事件回调配置 >> 编辑:选择需要的回调事件,以“单聊消息”为例,选中 “发单聊消息之前回调”,会在发送消息前请求回调URL,一系列判断后返回回调结果。

注意:回调URL需公网可见。

这一步需要保证的就是,即时通信IM可实现消息发送、即时通信IM控制台回调配置完成,且在发送消息时触发回调URL的请求,回调接口能够接收到请求数据。强调:回调URL接口需公网可见。

三、文字消息审核具体配置

目前准备工作已经做好了,接下来需要考虑的有以下几点:

  • 消息发送时回调接口接收请求参数,确认参数的准确性。
  • 根据不同参数获取到不同消息内容,如:聊天文本、图片地址等。
  • 对消息内容进行审核,不同的消息类型会调用不同的审核接口,接下来的内容会对不同的消息类型(文本和图片)进行举例说明。
  • 根据审核结果给出不同的返回结果,达到消息是否允许发送的效果。

Ps: 下面举例说明部分会以Step n来对应上面各点。

以下举例说明都是以审核IM消息内容为前提,如需审核其他内容,可见各审核文档的详细介绍。

举例说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
开发工具:SCF 云函数 https://console.cloud.tencent.com/scf (不一定非要云函数,服务公网可见即可,否则回调请求失败)
语言:PHP/7.2.2

通信IM SDK以及Demo源码:
地址: https://cloud.tencent.com/document/product/269/36887 
本文档例子使用Web&H5: https://github.com/tencentyun/TIMSDK/tree/master/H5

对象存储SDK文档:
PHP SDK地址: https://cloud.tencent.com/document/product/436/12266 (其他语言可见页面左侧栏对应标签)

IM配置项:
单聊消息 >> 发单聊消息之前回调

举例消息类型:
文本、图片

Step 1  回调请求参数

第三方回调简介:

https://cloud.tencent.com/document/product/269/1522

回调参数列表:

https://cloud.tencent.com/document/product/269/1523

消息格式描述:

https://cloud.tencent.com/document/product/269/2720

IM发送消息后会请求回调URL,本例中对SdkAppid参数做了简单身份验证,如需要其他复杂验证可自行判断。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

include_once 'commonFunc.php'; // 自定义公用函数,如发送POST、GET请求或做出Response响应等函数的封装
include_once 'imMsg.php'; // 自定义消息审核类,对文本和图片做出审核请求并对审核结果做出是否违规判断
include_once 'cos-php-sdk-v5-master/vendor/autoload.php'; // COS内容审核SDK引入,本例使用PHP的SDK

$content = file_get_contents('php://input'); // 获取POST JSON数据 字符串
$post  = json_decode($content, true); // POST JSON数据 数组

// 对SdkAppid做出简单身份验证
if(!isset($_GET['SdkAppid']) || $_GET['SdkAppid'] != ImMsg::SDK_APPID) {
    imcallback_return(false); // 接口返回结果数据
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**
 * 函数内列出两种回调结果
 * $send true 允许消息发送;false 禁止消息发送
 */
function imcallback_return($send = true) {
    $retSuccess = array(
        'ErrorCode' => 0, // 0 为允许发言
        'ErrorInfo' => '',
        'ActionStatus' => 'OK'
    );;
    $retErr = array(
        'ErrorCode' => 1, // 1 为拒绝发言
        'ErrorInfo' => 'err',
        'ActionStatus' => 'FAIL'
    );
    $ret = $send === true ? $retSuccess : $retErr;
    ob_clean();
    echo json_encode($ret);
}

回调请求示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST /?SdkAppid=123456&CallbackCommand=C2C.CallbackBeforeSendMsg&contenttype=json&ClientIP&OptPlatform HTTP/1.1
Host: www.example.com
文本类型:
{
    "MsgBody": [
        {
            "MsgType": "TIMTextElem", // TIMTextElem 表示消息类型为文本
            "MsgContent": {
                "Text": "asdad" // 文本内容
            }
        }
    ],
    "CallbackCommand": "C2C.CallbackBeforeSendMsg", // C2C.CallbackBeforeSendMsg 发单聊消息之前回调
    "From_Account": "user1",
    "To_Account": "user0",
    "MsgRandom": 123,
    "MsgSeq": 1234567,
    "MsgTime": 1629439393,
    "MsgKey": "1234567_123456_123456789",
    "OnlineOnlyFlag": 0
}

图片类型:
{
    "MsgBody": [
        {
            "MsgType": "TIMImageElem", // TIMImageElem 表示消息类型为图片
            "MsgContent": {
                "UUID": "123456-user1-abcdefghd", 
                "ImageFormat": 3, 
                "ImageInfoArray": [
                    {
                        "Type": 1, //原图
                        "Size": 43599, 
                        "Width": 1156, 
                        "Height": 582, 
                        "URL": "https://cos.ap-shanghai.myqcloud.com/6244-shanghai-007-shared-01-1256635546/2690-1400560394/e078-user1/582eef3bb1e6439cd842ae0bd6a16cae-101935?imageMogr2/"
                    }, 
                    {
                        "Type": 2, //大图
                        "Size": 0, 
                        "Width": 0, 
                        "Height": 0, 
                        "URL": "https://cos.ap-shanghai.myqcloud.com/6244-shanghai-007-shared-01-1256635546/2690-1400560394/e078-user1/582eef3bb1e6439cd842ae0bd6a16cae-101935?imageMogr2/"
                    }, 
                    {
                        "Type": 3, //缩量图
                        "Size": 0, 
                        "Width": 394, 
                        "Height": 198, 
                        "URL": "https://cos.ap-shanghai.myqcloud.com/6244-shanghai-007-shared-01-1256635546/2690-1400560394/e078-user1/582eef3bb1e6439cd842ae0bd6a16cae-101935?imageMogr2/&imageView2/3/w/198/h/198"
                    }
                ]
            }
        }
    ], 
    "CallbackCommand": "C2C.CallbackBeforeSendMsg", 
    "From_Account": "user1", 
    "To_Account": "user0", 
    "MsgRandom": 123, 
    "MsgSeq": 1234567, 
    "MsgTime": 1629357746, 
    "MsgKey": "1234567_123456_123456789", 
    "OnlineOnlyFlag": 0
}

回调应答示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
Server: nginx/1.7.10
Date: Fri, 09 Oct 2015 02:59:55 GMT
Content-Length: 75
{
  "ActionStatus": "OK", 
  "ErrorInfo": "", 
  "ErrorCode": 0 // 1 为拒绝发言;0 为允许发言
}

即时通信 IM 回调 App 后台的超时时间为2秒,且没有重试。如果回调超时,后续处理逻辑与没有配置回调时相同(例如,假设“发送群消息之前回调”超时,消息会正常下发)。

为确保回调成功率,第三方 App 应当尽可能加快回调处理速度,例如先发送回调应答,然后再处理具体业务逻辑。

Step 2 获取消息内容

回调类型

回调命令字

发单聊消息之前回调

C2C.CallbackBeforeSendMsg

发单聊消息之后回调

C2C.CallbackAfterSendMsg

其他回调命令及相关参数见 回调命令列表。

MsgType的值

类型

TIMTextElem

文本消息

TIMImageElem

图像消息

其他消息类别 MsgType描述及相关参数见 消息格式描述。

本例中简单获取了文本内容及图片地址URL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$flag = false;
switch($_GET['CallbackCommand']) {
    case 'C2C.CallbackBeforeSendMsg': { // 对发单聊消息之前回调进行封装
        $flag = ImMsg::cmdC2cMsgBefore($post);
        break;
    }
    default: {
        break;
    }
}
imcallback_return($flag);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImMsg::cmdC2cMsgBefore
public static function cmdC2cMsgBefore($allData) {
    $data = $allData['MsgBody'];
    $flag = true;
    foreach($data as $msgItem) {
        if($msgItem['MsgType'] == 'TIMTextElem') { // 文本类型审核
            // $msgItem['MsgContent']['Text'] 文本内容
            $flag = self::textDetect($msgItem['MsgContent']['Text']); 
        } else if($msgItem['MsgType'] == 'TIMImageElem') { // 图片类型审核
            // $msgItem['MsgContent']['ImageInfoArray'][0]['URL'] 图片URL地址,原图、大图、缩略图三选一
            $flag = self::imgDetect($msgItem['MsgContent']['ImageInfoArray'][0]['URL']);
        }
    }
    return $flag;
}

走到这一步,已经获取到了消息内容,即:

文本内容:$msgItem['MsgContent']['Text']

图片地址:$msgItem['MsgContent']['ImageInfoArray'][0]['URL']

接下来对消息内容发送审核请求并获取审核结果。

Step 3  对消息内容进行审核,获取审核结果

文本审核

https://cloud.tencent.com/document/product/460/56285

图片审核

https://cloud.tencent.com/document/product/460/37318

其他类型的审核可见页面左侧标签相关文档说明。

关于审核,为了开发者更方便、更快速地使用数据万象的基础图片处理媒体处理功能,以及 CDN 的云闪图片分发功能,我们提供了 SDK,开发者可根据具体需求进行选择,详情请参见对应的快速入门文档。对象存储的 SDK 也集成了数据万象的数据处理功能,若您需要使用其他语言的 SDK,例如 C++ 、JavaScript 等,请参见 COS SDK 概览。

  • 图片审核

关于图片审核的图片限制说明,请参见 规则与限制。

使用COS PHP SDK请求示例 (sample/getObjectSensitiveContentRecognition.php),IM消息审核使用图片链接审核方式即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

require dirname(__FILE__) . '/../vendor/autoload.php';

$secretId = "SECRETID"; //"云 API 密钥 SecretId";
$secretKey = "SECRETKEY"; //"云 API 密钥 SecretKey";
$region = "ap-beijing"; //设置一个默认的存储桶地域
$cosClient = new Qcloud\Cos\Client(
    array(
        'region' => $region,
        'schema' => 'https', //协议头部,默认为http
        'credentials' => array(
            'secretId' => $secretId,
            'secretKey' => $secretKey)));
try {
    //图片链接审核
    $imgUrl = 'https://test.jpg';
    $result = $cosClient->getObjectSensitiveContentRecognition(array(
        'Bucket' => 'examplebucket-125000000', //格式:BucketName-APPID
        'Key' => '/', // 链接图片资源路径写 / 即可
        'DetectType' => 'porn,ads',//可选四种参数:porn,politics,terrorist,ads,可使用多种规则,注意规则间不要加空格
        'DetectUrl' => $imgUrl,
//      'Interval' => 5, // 审核gif时使用 截帧的间隔
//      'MaxFrames' => 5, // 针对 GIF 动图审核的最大截帧数量,需大于0。
//      'BizType' => '', // 审核策略
    ));
    // 请求成功
    print_r($result);
} catch (\Exception $e) {
    // 请求失败
    echo($e);
}

响应结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GuzzleHttp\Command\Result Object
(
    [RequestId] => asdjahsfkjshfkjsdhfkjshfksjhfj=
    [PornInfo] => Array
        (
            [0] => Array
                (
                    [Code] => 0
                    [Msg] => OK
                    [HitFlag] => 0
                    [Score] => 0
                    [Label] => 
                )

        )

    [AdsInfo] => Array
        (
            [0] => Array
                (
                    [Code] => 0
                    [Msg] => OK
                    [HitFlag] => 0
                    [Score] => 0
                    [Label] => 
                )

        )

    [Key] => /
    [Bucket] => examplebucket-125000000
    [Location] => examplebucket-125000000.cos.ap-guangzhou.myqcloud.com//
)
  • 文本审核

使用COS PHP SDK请求示例 (sample/detectText.php),IM消息审核使用文本内容审核方式即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

require dirname(__FILE__) . '/../vendor/autoload.php';

$secretId = "SECRETID"; //"云 API 密钥 SecretId";
$secretKey = "SECRETKEY"; //"云 API 密钥 SecretKey";
$region = "ap-beijing"; //设置一个默认的存储桶地域
$cosClient = new Qcloud\Cos\Client(
    array(
        'region' => $region,
        'schema' => 'https', //协议头部,默认为http
        'credentials'=> array(
            'secretId'  => $secretId ,
            'secretKey' => $secretKey)));
try {
    // start --------------- 文本内容审核 ----------------- //
    $content = '敏感信息';
    $result = $cosClient->detectText(array(
        'Bucket' => 'examplebucket-125000000', //格式:BucketName-APPID
        'Input' => array(
            'Content' => base64_encode($content) // 文本需base64_encode
        ),
        'Conf' => array(
            'DetectType' => 'Porn,Terrorism,Politics,Ads', //Porn,Terrorism,Politics,Ads,Illegal,Abuse类型
            'BizType' => '',
        ),
    ));
    // 请求成功
    print_r($result);
    // end --------------- 文本内容审核 ----------------- //

} catch (\Exception $e) {
    // 请求失败
    echo($e);
}

响应结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GuzzleHttp\Command\Result Object
(
    [RequestId] => asdjsajfaslofjsdofjsoifjsf=
    [ContentType] => application/xml
    [ContentLength] => 1237
    [JobsDetail] => Array
        (
            [Code] => Success
            [Message] => Array
                (
                )

            [JobId] => asjhdkjahfkjashfkjsdfhkjs
            [State] => Success
            [CreationTime] => 2021-09-09T20:04:05+08:00
            [Content] => 57qm54Ku
            [Result] => 1
            [SectionCount] => 1
            [PornInfo] => Array
                (
                    [HitFlag] => 1
                    [Count] => 1
                )

            [TerrorismInfo] => Array
                (
                    [HitFlag] => 0
                    [Count] => 0
                )

            [PoliticsInfo] => Array
                (
                    [HitFlag] => 0
                    [Count] => 0
                )

            [AdsInfo] => Array
                (
                    [HitFlag] => 0
                    [Count] => 0
                )

            [Section] => Array
                (
                    [0] => Array
                        (
                            [StartByte] => 0
                            [PornInfo] => Array
                                (
                                    [Code] => 0
                                    [HitFlag] => 1
                                    [Score] => 97
                                    [Keywords] => 敏感词
                                )

                            [TerrorismInfo] => Array
                                (
                                    [Code] => 0
                                    [HitFlag] => 0
                                    [Score] => 0
                                    [Keywords] => 
                                )

                            [PoliticsInfo] => Array
                                (
                                    [Code] => 0
                                    [HitFlag] => 0
                                    [Score] => 0
                                    [Keywords] => 
                                )

                            [AdsInfo] => Array
                                (
                                    [Code] => 0
                                    [HitFlag] => 0
                                    [Score] => 0
                                    [Keywords] => 
                                )

                        )

                )

        )

    [Bucket] => examplebucket-125000000
    [Location] => examplebucket-125000000.ci.ap-guangzhou.myqcloud.com/text/auditing
)
Step 4  回调请求返回结果

走到这一步,说明已经对消息内容进行了审核并作出了是否违规的判断,接下来就是返回是否违规的结果即可。

Step 1回调应答示例中也提到了,ErrorCode=1拒绝发言,ErrorCode=0允许发言。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
Server: nginx/1.7.10
Date: Fri, 09 Oct 2015 02:59:55 GMT
Content-Length: 75
{
  "ActionStatus": "", 
  "ErrorInfo": "", 
  "ErrorCode": 0 // 1 为拒绝发言;0 为允许发言
}

在用户侧效果为:

具体参数及含义或其他应答方式可见 第三方回调简介 或同页面左侧其他文档页。

至此,IM发送消息、IM请求回调、消息内容审核、回调应答、消息发送结果,所有步骤均已完成。

四、写在最后

随着各种网络安全法律法规和战略规划相继出台,监管部门对网络内容安全监管将日趋严格,对消息监管也日趋严格。对于聊天之间的消息如何把控也成为了重要的问题?对象存储本次推出的内容审核功能,可以帮助用户实现IM消息的审核服务,对于违规内容进行审核把控,为您的网络安全保驾护航。

更精品文章等您了解

👇🏻 真诚推荐您关注👇🏻

点击“阅读原文”,了解更多关于内容审核!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云存储 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何设计一个架构
架构不是像平常写代码一样,对就是对,错就是错,它并无对错之分,是一个取舍的过程。当我们从0开始做架构的时候,的确是比较困难。虽然万事开头难,但是一个好的开始相当于成功了一半,会给我们接下去的工作打下结实的基础。
哲洛不闹
2019/06/12
7450
架构设计的真谛:系统与子系统、模块与组件、框架与架构
在软件研发这个领域,程序员的终极目标都是想成为一名合格的架构师。然而梦想很美好,但现实却很曲折。
玄姐谈AGI
2021/03/25
8310
架构设计的真谛:系统与子系统、模块与组件、框架与架构
从零开始学架构读书笔记
  软件架构的出现是为了解决系统规模增加后出现了系统耦合严重,开发效率低,逻辑复杂,扩展困难等问题。所以架构设计是为了解决软件复杂度而存在的,所以架构设计的目地是识别出需求的复杂点然后针对性的解决。系统设计时需要考虑:性能,系统的可扩展性,安全性,高可用,成本。   架构师的工作并不神秘,成熟的架构师需要对已经存在的技术非常熟悉,对已经经过验证的架构模式烂熟于心,然后根据自己对业务的理解,挑选合适的架构模式进行组合,再对组合后的方案进行修改和调整。
良辰美景TT
2018/09/11
1.1K0
从零开始学架构读书笔记
架构设计文档模板
架构设计中最重要的两个文档的模板和关键说明。这个案例文档仅给出一些关键内容供你参考,部分细节无法全面覆盖或者完全保证正确。(斜体字是示例)
Dlimeng
2023/06/30
1.1K0
架构设计文档模板
架构设计之一——基础架构
•典型表现有软件质量低下、项目无法如期完成、项目严重超支等,因为软件而导致的重大事故时有发生。
aneutron
2022/08/10
8310
浅谈软件架构
每一个程序员都有一个架构师的梦,可理想很丰满,现实很骨感---大部程序员工作中都做着简单的 CRUD,我也不例外。如果就这样还常把“架构”两个字挂在嘴边,估计程序员们都会脸红。但就因为暂时还不能成为架构师,我们就要放弃成为架构师的梦想了吗?显然不能,掌握架构设计的相关理论是成为架构师的前提,有了方法论可以更好地指导我们干活。机会总是留给有准备的人的,万一哪天梦想实现了呢?
政采云前端团队
2023/11/16
5310
浅谈软件架构
从程序员到架构师的精进之路
“程序员到架构师的技术成长之路分为几个典型的阶段:工程师 - 高级工程师 - 技术专家 - 初级架构师 - 中级架构师 - 高级架构师”
架构精进之路
2020/08/17
1.2K0
从程序员到架构师的精进之路
软件架构如何建模
相信大家对模型一词都不陌生,但是在我们实际工作中进行软件架构设计的时候,要如何去建模呢?不知道大家是怎么去理解建模一词并能实际落地? 今天我来谈谈自己在软件架构中如何进行建模.
小坤探游架构笔记
2025/04/30
1260
软件架构如何建模
架构师之路一-架构师入门指引
导读:本系列文章教你怎么样成为一名架构师,而本篇文章则带你先认识一下什么是架构师,架构师的工作是什么?
JAVA日知录
2020/03/12
3.4K0
不画一张架构图讲透架构思维
本文深入探讨软件架构的本质与设计方法论,从架构定义演变到现代架构实践挑战,系统分析架构设计面临的业务复杂度、分工困境和现实约束。作者提出“架构即软件设计本身”的核心观点,强调架构应平衡业务需求、团队协同与系统演进,并最终以实用主义视角提出“恰如其分的架构”理念。
腾讯云开发者
2025/07/24
1840
不画一张架构图讲透架构思维
Java程序员职业发展路径图,如何才能完成从新手码农到架构师的转变
从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚重的技术专家?本文将为你带来一张程序员发展路径图,但你需要知道的是,天下没有普适的道理,具体问题还需具体分析,实践才能出真知。
慕容千语
2019/06/13
1.4K0
架构师成长全景学习路线:从程序员到技术专家的进阶指南
架构师作为技术决策的核心角色,需要构建技术深度与业务广度的双重能力体系。根据《架构师启示录》(灵犀,2024)提出的知识模型,架构能力可拆解为三大维度:
码事漫谈
2025/07/28
4030
架构师成长全景学习路线:从程序员到技术专家的进阶指南
技术角 | 架构学习书摘总结(一)概念和基础部分
最近阅读了一本架构方面的入门图书叫《从零开始学架构:照着做,你也能成为架构师》,部分内容比较不错,先做书摘总结,以便加深印象与未来回顾学习。
ZNing
2020/05/13
8440
架构设计方法论沉淀
架构设计流程:识别系统复杂度->设计备选方案->评估和选择备选方案->详细方案设计
vitofliu
2021/07/06
1.3K0
5分钟了解系统架构设计(3)
最近梳理了之前学习的架构设计相关的一些课程学习总结,将其整理成了一个大纲脑图,以每篇5分钟系列展现出来,希望对你有所帮助。
Edison Zhou
2022/12/30
4310
5分钟了解系统架构设计(3)
架构设计方法初探
1. 基本概念和目的2. 架构设计复杂度来源2.1 高性能2.2 高可用2.3 可扩展性2.4 低成本、安全、规模3. 架构设计三原则3.1 合适原则3.2 简单原则3.3 演化原则4. 架构设计的流程
芋道源码
2018/12/24
4190
架构设计方法初探
直击架构本质:优秀架构师必须掌握的几种架构思维
架构的本质是管理复杂性,抽象、分层、分治和演化思维是我们工程师/架构师应对和管理复杂性的四种最基本武器。
范蠡
2019/11/06
1.3K0
直击架构本质:优秀架构师必须掌握的几种架构思维
为什么大部分人做不了架构师?
成为架构师,是许多程序员的职业梦想。然而其中只有少数有着丰厚编码积累、超强自驱力和独到思维的程序员才能最终成为架构师。其实,日常工作中小到某个功能的开发,大到整个业务系统的设计,都可以看到架构设计的影子。《从0开始学架构》一书是颇受程序员欢迎的架构设计入门教程。接下来本文作者将提取该书籍之精髓,结合自身经验分享架构设计常见方法以及高可用、高性能、可扩散架构模式的实现思路,将架构设计思维“为我所用”、提升日常研效。希望对你有帮助~
腾讯云开发者
2023/07/04
9402
为什么大部分人做不了架构师?
从零开始学架构-day04
不得不说我是三天打渔两天晒网,烂泥巴糊不上墙。 烂泥巴开始打渔。 上节跟着大佬学习了,架构的复杂度来源,现在回顾下,确实想不起来了。重新开一遍。 回顾 影响架构复杂度的几大因素,追求高性能,高可用,
袁新栋-jeff.yuan
2021/12/07
2480
从零开始学架构-day04
如何设计可扩展、高性能、高可用架构?| 极客时间
最近跟一个架构师老哥聊天,他总把“代价”放在嘴边。 他们公司业务有所变动和发展,原来的架构多少遇到了些问题,调整起来难度大,同时也牵扯到成本问题,但他又面临着业务层的压力。举棋不定、想不好如何权衡。 这是很多技术骨干和架构师工作过程中常常遇到的问题。我们都希望架构设计满足高可用、高性能、可扩展,而架构实则是权衡利弊后在现有资源约束下的“最合理决策”,这需要系统性地思考,很多时候往往牵一发动全身。 在真实的服务运行过程中,不可控因素很多,如地震、洪水等天灾,再比如主干网被挖断等人祸都会大大降低服务可用性。
深度学习与Python
2023/03/29
3310
如何设计可扩展、高性能、高可用架构?| 极客时间
推荐阅读
相关推荐
如何设计一个架构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验