首页 文章 精选 留言 我的

精选列表

搜索[安全机制],共10000篇文章
优秀的个人博客,低调大师

Delta Lake Presto Integration & Manifests 机制

原文链接 该功能与我们之前平台化 Delta Lake 平台化实践(离线篇) 的很多工作都较为相似,比如与 metastore 的集成,直接通过 manifest 读取 delta 存活文件等。Delta Lake 在 0.5 之前只支持通过 Spark 读取数据,在新版本中增加了其他处理引擎通过 manifest 文件访问 Delta Lake 的能力。下文以Presto 为例说明如何通过 manifest 文件访问数据,manifest 文件的生成及其一些限制。 01 使用 Presto 使用 manifest 文件从 hive 外部表中读取数据,manifest文件是一个文本文件,包含该表/分区所有存活数据的路径列表。 当使用 manifest 文件在 Hive metastore 中定义外部表时,Presto 将会先读取 mani

优秀的个人博客,低调大师

【热点】微信的消息收发机制

微信可能是国内最早一批做微服务架构体系的,毕竟微服务的理念与腾讯一直倡导的“大系统小做”有很多相通之处,当然微信的功能有很多,衣食住行都能找到入口。我们今天单说它的原生功能:即时通信。 这块内容本座想分两部分来讲,第一部分是点到点聊天,第二部分是群组聊天。这两种聊天模式有共同点,比如说已读信息不会在服务端保留,因此换新手机是找不到历史消息的。也有不同点,比如服务端的架构和数据流等等。 先说点到点聊天,手机端通过打开微信软件建立了到腾讯云的微信网关,当然考虑到就近访问与负载平衡,不同客户端可能连到不同的网关。当A用户通过网关B发送微信给在线用户B时,会话微服务会记录当前所有用户的连入信息,维护如下的用户-网关表: 用户 网关A BB CC C 如果对端用户不在线,则会记录上次连接的网关,如果从来没在线过则随机分配网关。这张表虽然有高达10亿的记录(微信用户数量),但好在只是一张二维表而且可做冷热分离,因此存储量并不大,然后各个网关上会有热数据的分布式缓存。 为什么要这样做呢,因为我们知道让一台网关服务器来维持每一个客户端的TCP连接是非常消耗内存的,鉴于微信用户的数量,一般硬件的性能是无法达到的,因此通过会话微服务来记录这些信息可以很好地为网关减负。 接下来当消息进入到会话微服务找到B对应的网关,然后通过该网关将消息传递给B用户。 等等,什么,网关在没有用户请求的情况下还能直接给用户发消息,这是我认识的CS架构么?当然通过长轮询(Long Polling)可以定期从服务端拉数据,但这就影响了消息的实时性了。传统的HTTP看似无法实现了,我们想到的办法是WebSocket(WSS)。WSS是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议。它允许用户和服务器之间的流连接,并允许即时信息交换。 Ok,消息传递到在线用户B了,B用户回复给服务器“已收到”的回执(不论已读还是未读),会话服务器再以WSS形式将回执转发给A。当然如果B用户离线,消息会存放在消息数据库中直到过期(三天?)。因此点对点聊天在服务器上并不消耗太多的存储资源。 接下去我们说说群组消息,当会话微服务识别到消息的接收方是一个群组时,会去调用群组微服务,群组微服务的表结构是一张一对多的分布式数据表: 群组ID 用户XXX AXXX BXXX CYYY CYYY DYYY E 得到目标群的用户列表后,会话微服务再查询自己的会话数据库找到用户对应的网关,通过WebSocket的形式发送给该群组的所有成员。 当然就像新浪在李晨发“我们”,鹿晗发“官宣”,中国国家男子足球队发“对不起”的时候会发生服务器宕机现象,新浪的处理方式是将粉丝群切片,分批次发给不同子群。微信也会在成员过多的群通过异步的消息队列进行批量组播,但即便如此,与点到点微信不同的是,网关的负担会大很多,因此除了将会话微服务从网关上拆解,还需要进一步将验证服务、语义分析服务(各种网络协议的解包)从网关服务器上拆解下来,由此就形成了微信的群族消息的数据流。

优秀的个人博客,低调大师

Android 11 中的存储机制更新

Android 10 引入了对外部存储权限的更改,旨在更好地保护用户数据以及降低应用的存储空间。Android 11 开发者预览版里加入了更多改进,以帮助开发者更好地适应这些权限修改。 在 Google Play 上发布的大部分应用都会请求 (READ_EXTERNAL_STORAGE) 存储权限,来做一些诸如在 SD 卡中存储文件或者读取多媒体文件等常规操作。这些应用可能会在磁盘中存储大量文件,即使应用被卸载了还会依然存在。另外,这些应用还可能会读取其他应用的一些敏感文件数据。在 Android 10 中,我们调整了存储权限的工作方式,仅为应用提供其所需的访问权限。这也是在鼓励应用在指定目录下进行文件存储以限制文件混乱。当应用被卸载后,这些相关的目录也会被删除。 Android 10 所带来的关于存储上的变更遵循了以下三个基本原则 更好的从属性: 系统知道哪些文件属于哪些应用,这可以让用户更方便地管理他们的文件。当应用被卸载后,除非用户需要,否则应用之前所创建的文件也不应该保留在设备上; 保护应用数据: 当一个应用将它所属的文件写入外部存储时,这些文件是不应该被其他应用所访问的; 保护用户数据: 当用户下载了一些文件,比如带有敏感信息的邮件附件,这些文件应该对其他应用不可见。 目标 API 级别 (Target SDK Level) 设定为 Android 10 的应用无需请求 Storage 权限,就可以使用自己的外部存储目录并管理媒体集合 (音频、视频、图片和下载数据)。Storage 权限仅允许读取其他应用共享的音频、视频和图片集合,但并不允许访问非本应用创建的下载数据。在 Android 10 里唯一一种访问其他应用创建的非媒体文件的途径是使用存储访问框架 (Storage Access Framework) 提供的文档选择器。 在 Android 11 中,我们会通过下述的几点来继续优化分区存储 (Scoped Storage) 的开发者体验。 Android 10 对外部存储权限行为https://developer.android.google.cn/training/data-storage#scoped-storage 请求 (READ_EXTERNAL_STORAGE) 存储权限https://developer.android.google.cn/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE 它所属的文件https://developer.android.google.cn/training/data-storage/app-specific 存储访问框架 (Storage Access Framework)https://developer.android.google.cn/guide/topics/providers/document-provider 改进媒体存储 Android 10 中要求所有应用都使用 MediaStore API 来访问照片、视频和音乐文件,我们也将继续秉承这个原则。但是我们也知道,很多深度依赖基于原始文件路径 API 的应用和第三方库是很难切换到使用文件描述符 (File Descriptor) 的。因此在 Android 11 里,依赖原始文件路径的 API 和库可以再次使用了。您需要在应用的 Manifest 文件里添加 requestLegacyExternalStorage 属性,以保证 Android 10 的用户也可以使用该特性。在实际的运行中,依赖原始文件路径的 I/O 请求会被重定向到使用 MediaStore API,当使用这种方式访问本应用存储空间之外的文件时,这次重定向会造成性能影响。而且直接使用原始文件路径,并不会比使用 MediaStore API 有更多优势,因此我们强烈建议直接使用 MediaStore API。在 Android 10 中,应用在对每一个文件请求编辑或删除时都必须得到用户的确认。而在 Android 11 中,应用可以一次请求修改或者删除多个媒体文件。系统的默认图库应用 (Gallery) 将不再展示这些对话框。我们希望这项改进能够使用户体验更加顺畅。 可以再次使用https://developer.android.google.cn/preview/privacy/storage#media-files-raw-paths 修改或者删除多个媒体文件https://developer.android.com/preview/privacy/storage#media-file-access 对 Storage Access Framework 的更新 当我们对广泛的存储访问进行限制后,一些开发者试图使用 Storage Access Framework (SAF) 遍历整个文件系统。但是,SAF 并不适用于广泛地访问共享存储内容。因此,我们对其进行了更新,限制了它对某些路径的可见性。 在 Android 11 中,将不再允许用户授权访问 Downloads 的根目录、每个可用 SD 卡的根目录以及其它应用的目录。应用仍然可以通过 Storage Access Framework API 或者文件选择器来帮助用户从共享存储中选取个别文件。 对其进行了更新 https://developer.android.google.cn/preview/privacy/storage#file-directory-restrictions 针对文件管理应用的特殊权限 针对文件管理器以及一些备份类的应用,它们需要获得共享存储的更广泛的访问权限。Android 11 里将会引入一个特别的权限叫做 MANAGE_EXTERNAL_STORAGE,该权限将授权读写所有共享存储内容,这也将同时包含非媒体类型的文件。但是获得这个权限的应用还是无法访问其他应用的应用专属目录 (app-specific directory),无论是外部存储还是内部存储。 我们希望继续允许一些确实有广泛访问外部存储文件需求的应用。在 Android 11 中,已获得MANAGE_EXTERNAL_STORAGE 权限的应用,可以将用户引导至系统设置页面,让用户选择是否允许该应用 "访问所有文件" (All Files Access)。下面的两种应用示例是可以使用该权限的: 文件管理器 —— 该类应用的主要功能是管理文件; 备份和恢复 —— 该类应用需要访问大批量的文件 (比如切换设备的时候进行数据迁移,或者将数据备份到云端)。 如果您的应用需要访问单个文件,比如文字处理应用,则应该使用 Storage Access Framework (SAF)。 如果您的应用需要 MANAGE_EXTERNAL_STORAGE 权限或者调用了依赖原始文件路径的 API,那么您必须在 AndroidManifest 文件中添加 requestLegacyExternalStorage=true,这样您的应用才能够在搭载 Android 10 的设备上正常运行。更多相关信息请查看我们在去年 Android 开发者峰会的分享视频《准备好使用分区存储》: 腾讯视频链接 https://v.qq.com/x/page/d3026c1bpr3.html Bilibili 视频链接 https://www.bilibili.com/video/av77198618/

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册