首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

啊,业务层是否也需要服务化?

什么时候抽象数据服务层》观点是: 当手写代码DB获取数据,成为通用痛点时候,就应该抽象出DAO层,简化数据获取过程,提高数据获取效率,向上游屏蔽底层复杂性 当业务越来越复杂,垂直拆分系统越来越多...首先调用商业基础service,获取商业广告帖子数据,用于顶部置顶/精准广告帖子展示 再调用搜索基础service,获取自然搜索帖子数据,用于中部自然搜索帖子展示 再调用推荐基础service,获取推荐帖子数据...,用于底部推荐帖子展示 再调用用户基础service,获取用户数据,用于右侧用户信息展示 … 如果只有一个列表页这么写还行,但如果有招聘、房产、二手、二手车、黄页…等多个大部分是共性数据,少部分是个性数据列表页...service提供RPC接口,分别获取数据,底层数据获取复杂性,全都屏蔽了此处 是不是连接关系也看起来更清晰?...这样好处是: 复杂基础服务获取数据代码,只有通用业务service处写了一次,没有代码拷贝 底层基础数据service接口发生变化,只有通用业务service一处需要升级修改 如果有bug,不管是底层基础数据

1.2K60
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel利用redis和定时任务实现活跃用户统计

最近在SummerLaravel教程-Web开发实战进阶》学到很多东西,以前只会看文档,大概了解Laravel内容而在实际运用确不知道该怎样做,碰到一个需求不会立马联想到“这个东西可以用...实现...linux和redis 以及laravel任务调度 活跃用户算法 我们规定系统每个小时,统计最近7天用户所发表帖子数和评论数。...用户发布帖子+4分 用户发布评论+1分 最后计算所有得分进行倒序排序 取前八个用户显示主页活跃用户栏 类似 需求已经明确我们开始编写代码,不过在编写代码之前我们需要.env中指定缓存驱动为redis...// 否则运行匿名函数代码来取出活跃用户数据,返回同时做了缓存。... 我们要通过定时任务来实现用户活跃统计,所以我们通过命令执行ActiveUserHelper逻辑。

88020

程序猿必读-防范CSRF跨站请求伪造

CSRF攻击最早在2001年被发现,由于它请求是用户IP地址发起,因此服务器上web日志可能无法检测到是否受到了CSRF攻击,正是由于它这种隐蔽性,很长时间以来都没有被公开报告出来,直到...于是管理员不知情情况下,一个赋予用户管理员权限操作已经悄悄以他身份执行了。这时候攻击者121就获取到了网站管理员权限。...这就要求我们在请求嵌入一些额外授权数据,让网站服务器能够区分出这些未授权请求,比如说在请求参数添加一个字段,这个字段登录用户Cookie或者页面获取(这个字段值必须对每个用户来说是随机...攻击者伪造请求时候是无法获取页面与登录用户有关一个随机值或者用户当前cookie内容,因此就可以避免这种攻击。...防范技术 Synchronizer token pattern 令牌同步模式(Synchronizer token pattern,简称STP)是在用户请求页面所有表单嵌入一个token,服务端验证这个

2.4K20

业务层,到底需不需要服务化?

(1)首先调用商业基础服务,获取商业广告帖子数据,用于顶部置顶/精准广告帖子展示; (2)再调用搜索基础服务,获取自然搜索帖子数据,用于中间自然搜索帖子展示; (3)再调用推荐基础服务,获取推荐帖子数据...,用于底部推荐帖子展示; (4)再调用用户基础服务,获取用户数据,用于右侧用户信息展示; (5)… 如果只有一个列表页这么写还行,但如果有招聘、房产、二手、二手车、黄页等多个业务,都这么获取共性数据,而只有少部分个性数据...RPC接口,分别获取数据,底层数据获取复杂性,全都屏蔽了此处; 是不是连接关系也看起来更清晰?...这样好处是: (1)复杂基础服务获取数据代码,只有通用业务服务处写了一次,没有代码拷贝; (2)底层基础数据服务接口发生变化,只有通用业务服务一处需要升级修改; (3)如果有bug,不管是底层基础数据服务...于是,当业务越来越复杂,垂直拆分系统越来越多,基础数据服务越来越多,底层数据获取复杂性成为通用痛点时候,就应该抽象出通用业务服务,简化数据获取过程,提高数据获取效率,向上游屏蔽底层复杂性。

50710

3分钟短文:Laravel表单验证“指挥中心”:FormRequest

引言 上一章我们学习到,Laravel控制器内引入 ValidatesRequests trait,从而使得继承了基类控制器类拥有了验证器所有方法。...下面我们根据业务逻辑,首先修改 authorize 方法,满足以下两个条件,才允许验证: 必须登录状态 用户必须发布过帖子 下面是代码实现: public function authorize() {...->route()方法读取,这与 get/post 方法获取有所不同,大家要记得区分。...$request) { // 存储数据 }); 这条路由是我们上述代码中演示位置参数 blogPost 时引入了,我们执行方法引入了表单请求类,laravel自动会将请求数据代入到该类内执行验证...我们完全可以最后一个写作方法延伸出更多花样玩法,大家可以去github借鉴大神写法,学习更多技巧。

66020

3分钟短文:Laravel表单验证“指挥中心”:FormRequest

引言 上一章我们学习到,Laravel控制器内引入 ValidatesRequests trait,从而使得继承了基类控制器类拥有了验证器所有方法。...下面我们根据业务逻辑,首先修改 authorize 方法,满足以下两个条件,才允许验证: 必须登录状态 用户必须发布过帖子 下面是代码实现: public function authorize() {...->route()方法读取,这与 get/post 方法获取有所不同,大家要记得区分。...$request) { // 存储数据 }); 这条路由是我们上述代码中演示位置参数 blogPost 时引入了,我们执行方法引入了表单请求类,laravel自动会将请求数据代入到该类内执行验证...我们完全可以最后一个写作方法延伸出更多花样玩法,大家可以去github借鉴大神写法,学习更多技巧。

87900

图解系统设计之Instagram

我们数据本质是关系型,并且我们需要数据顺序(帖子应按时间顺序出现)和即使故障情况下也不会丢失数据(数据持久性)。此外,我们例子,我们将从关系查询受益,如根据用户 ID 获取关注者或图像。...向用户发送已成功存储照片更新。若遇到错误,也会通知用户。 查看照片过程与上述流程类似。客户端请求查看一张照片,数据库获取与请求匹配合适照片,并显示给用户。...② 推送方法 推送方法,每个用户都负责将他们发布内容推送给关注他们的人timeline。之前方法每个关注者那里拉取帖子,但在当前方法,我们将帖子推送给每个关注者。...基于拉取用户:关注者数量为数十万或数百万名人用户。 时间轴服务基于拉取关注者那里拉取数据并将其添加到用户时间轴。...在请求时,我们键值存储获取数据并显示给用户。键是 userID,而值是时间轴内容(指向照片和视频链接)。

17010

Laravel推荐使用十个辅助函数

前言 Laravel 包含各种全局辅助函数。 laravel 包含大量辅助函数,您可以使用它们来简化开发工作流程。...在这里,我将编写 10 个最好 laravel 帮助函数,用于使我开发更容易。 您必须考虑必要时使用它们。...您还可以查看所有的官方文档 laravel helper functions. array_dot() array_dot() array_dot () 辅助函数允许你将多维数组转换为使用点符号一维数组...你还可以将路径传递到公共目录文件或目录以获取该资源绝对路径。 它将简单地将 public_path() 添加到你参数。...这个 uuid 可以存储索引数据库列。 这些 uuid 是基于时间戳创建,因此它们会保留你内容索引。

3.7K20

系统设计:Facebook新闻流设计

4.将此提要存储缓存,并返回要在Jane提要上呈现顶级帖子(比如20篇)。 5.在前端,当Jane完成当前提要时,她可以获取接下来20个帖子服务器等。...这里需要注意一点是,我们生成了一次提要并将其存储缓存。新Jane关注的人那里收到帖子?如果Jane在线,我们应该有一个排名机制并将这些新帖子添加到她提要。...5.视频和照片存储,以及缓存:Blob存储,用于存储帖子包含所有媒体。 6.新闻源生成服务:收集并排列所有相关帖子,供用户生成新闻源和存储缓存。...让我们讨论不同选择 用于向用户发布提要数据。 1.“拉”模型或扇出加载:此方法涉及保留所有最近提要数据内存,以便用户可以需要时服务器中提取内存。客户可以提取提要定期或在需要时手动获取数据。...“推送”模式或写时扇出:对于推送系统,一旦用户发布了帖子,我们可以立即将此帖子推送给所有追随者。优点是获取提要时 你不需要浏览你朋友列表,为他们每一个人获取提要。这很重要减少读取操作。

6.1K283

Laravel代码简洁之道和性能优化

在此示例,将重新激活非活动用户并updated_at更新时间戳: DB :: table ( 'users' )-> upsert ( [ 'username' => 'foo' , 'active...第二个参数是唯一标识记录列。除 SQL Server 外所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新列作为第三个参数(可选)。默认情况下,将更新所有列。... Laravel 5.5-5.7 ,这需要HasUpsertQueriestrait: class User extends Model { use \Staudenmeir\LaravelUpsert...->upsert(...); Eloquent 所有版本 LumenHasUpsertQueries都需要该特性。...当然了还是有一些注意点和坑,下面分享一下 注意问题 要根据需求添加唯一索引 根据官方文档说明,我们model必须添加这行代码,才能以Eloquent方式用 use \Staudenmeir\

5.7K20

WP Engine推出AI驱动WordPress网站搜索

WP Engine 一个测试工具允许用户几毫秒内对使用 WordPress 构建网站执行语义搜索。...专有工具本周 WP Engine 虚拟 De{Code} 会议 向开发者和其他 WordPress 用户展示。...他补充说,越来越多用户期望搜索获得更类似于 GPT 体验。而且风险很高:谷歌统计数据显示,82% 客户会避开他们在其中遇到搜索困难网站。...“我们所做是索引和映射你 ACF 字段,开箱即用,点击一个按钮,无需自定义映射,无需简码,无需任何代码,你只需智能搜索默认索引所有 ACF 和所有自定义帖子类型,”他说。...将搜索 WordPress 数据库卸载,并自动索引 ACF 字段所有自定义帖子类型——我们认为这是我们在此处 […] 独一无二地方;再次希望以 WordPress 开发人员工作方式工作,”他说

8510

宇宙最强语言PHP“全栈”框架——Laravel来了!

点击“博文视点Broadview”,获取更多书讯 动态网页发展前期,编写一个Web应用程序方法和今天有很大不同。...“因为山在那里”,也许是攀登一座山峰理由,但是选择使用一个特定框架可以有更好理由。值得思考是 :为什么使用框架?更准确地说,为什么使用Laravel这个框架?...假如你要创建一个 Web 应用,会哪里开始呢? 也许会 HTTP 请求开始,所以现在需要评估所有可用 HTTP 请求库和 HTTP 响应库并在其中选择一个。...所有构建 Web 应用程序时最常见任务,数据库交互到身份验证、队列到电子邮件再到缓存,都通过 Laravel 提供组件简化了。...在其他框架,即使使用了推荐配置,也需要对所有的设置进行声明。因此,使用 Laravel 构建项目比其他大多数 PHP 框架花费时间少。 Laravel 还专注于简约性。

2.2K10

3分钟短文 | Laravel获取关联表指定列3个方法

今天我们说一说,Laravel,如何关联模型,以及制定返回列,以精简返回数据。 学习时间 假如有两个模型 User 和 Post,一个用户会发布多个post,也就是一对多关联关系。...User模型,指定此关系: public function post(){ return $this->hasmany('Post'); } 反过来,Post模型,必然有一个发布者,是一对一映射...: public function user(){ return $this->belongsTo('User'); } 现在假如有一个查询,获取所有帖子,并返回发布者信息。...关联关系 我们注意到,关联关系声明上,第一节仅使用了 belongTo,hasMany 这样属性,其实还可以链式调用。这样对于所有使用 with 语句关联模型查询,都会生效。...:-( 写在最后 本文通过2种确切可用方式,裁剪了关联模型返回列内容。 实际代码,第一种使用闭包修剪SQL语句,用途较为广泛。 第二种方式影响全局,一般不推荐。

2K20

详解将数据Laravel传送到vue四种方式

在过去两三年里,我一直研究同时使用 Vue 和 Laravel 项目,每个项目开发开始阶段,我必须问自己 “我将如何将数据 Laravel 传递到 Vue ?”。...直接回显到数据对象或组件属性 ? 赞成: 简单明了 反对: 必须与嵌入到 Blade 模板 Vue 应用程序一起使用 可以说是将数据 Laravel 应用程序移动到 Vue 前端最简单方法。...赞成: 整个 Vue 应用程序和任何其他脚本全局可用 反对: 可能很混乱,通常不建议用于大型数据集 虽然这看起来有点老生常谈,但将数据添加到窗口对象可以轻松地创建全局变量,这些变量可以应用程序中使用任何其他脚本或组件访问...你可以使用内置 api auth 中间件来执行此操作,或者也可以自己滚动发送请求过程获取令牌。...从那里,你 Vue 应用程序应该存储该令牌 (存储 LocalStorage 或者 Vuex),每一个传出请求,都将它加入到 Authorization header 作为授权头。

8K31

多业务融合推荐策略实践与思考

表格可以看出不同类型兴趣效果不同,扩展出来兴趣效果远低于原始兴趣,而泛扩展效果会更差。...用户对黄页兴趣占比是20%,但候选集中黄页占比只有10%,也就是说即便推出候选集中所有的黄页贴子,也不能满足黄页帖子占比要求,这种情况就用其他品类帖子进行补足。...:不同场景有不同目标,整体目标可能是提升CTR,但是某些具体场景可能是提升用户体验,也可能是增加停留时长,多个目标之间平衡也是优化过程需要持续解决问题; 算法和策略之间关系:解决问题和取得实际效果角度来看...典型方案有这几个: 直接屏蔽屏蔽帖子——对这个用户不再展示该帖子屏蔽标签——不再展示类似标签帖子,比如用户多次提供租房帖子负反馈,那么就对该用户屏蔽所有有租房类标签帖子。...由于这种方案比较生硬,所以往往达不到好效果; 建立策略:挖掘用户对哪一类标签不感兴趣,推荐时对这一类标签权重进行修正,不会直接屏蔽此类帖子; 建立算法模型:通过算法把负反馈结果映射成独立特征,

1.4K21

零打造自己CICD系统|php项目部署v1版本

零打造自己CI/CD系统|php项目部署v1版本 今天我们结合前面所讲内容进行PHP项目的完整部署流程,当然我们不会一步到位,会慢慢迭代完善部署整个过程。...composer 工具 Ansible 安装部署 •安装ansible•调整配置文件ansible.cfg pip install ansible php环境安装部署 •不要想着去源码编译•先安装remi源•然后安装...上找了一个demo,php-laravel-hello-world[3], 我本地编译过,运行没问题 Ansible roles编写和存放 •Ansible roles存放位置/etc/ansible.../roles下,具体还要看ansible.cfg里如何定义roles路径•使用时候直接采用单独目录形式来存放该应用对应配置文件 Ansible和远程机器通信 •远程机器上部署应用建议使用普通用户...,便于回滚•每一步操作都要注册,下一步操作之前判断上一步执行结果成功与否•执行数据流过程屏蔽异常主动退出,人工捕获异常,然后退出之前清理前面执行所有操作•composer生产使用时候,尽量加上

1.1K40

Science调查近万名新冠研究者:38%回复称被网络骚扰,18%受死亡威胁

这一具体问题调查,受访研究人员采取:社交媒体上屏蔽他人、删除账号、拒绝公开宣传等自我保护措施,以避免骚扰和抵制骚扰。...在这些措施,「社交媒体上屏蔽或沉默」是最便捷自我保护方式,41.5%(81/195)的人使用了该方法。...科研人推特:悄无声息到活粉数十万 根据「期刊文章研究所」(Research on Research Institute)一份报告,推特平台发布了大部分提及COVID-19 文献帖子:截至 2021...事实证明,Cevik方法很受欢迎:其他推特用户已转发了她200多篇关于COVID-19研究论文帖子至少12,000次,使她推特帐户相关比较上排名前50 。 ...论文发表仅3天后,Meyerowitz-Katz推特一篇长帖, 对此论文数学假设提出了质疑。不久之后,刊发此论文刊物邀请他提交评论以供发表。

37130

CVE-2021-39165: 从一个Laravel SQL注入漏洞开始Bug Bounty之旅

,配置如下 前台和API读取操作(GET)不需要用户权限 API写入操作(POST、PUT、DELETE)需要用户权限 后台所有操作都需要用户权限 一些特殊操作都会经过逻辑判断,比如上文说到两个操作...); 所以,通过这个方法,我可以做到了一件事情:控制where()第一个参数,到能够完整控制where()所有参数。...且Laravel不支持堆叠注入,那么要利用这个漏洞,就有两种方式: 通过UNION SELECT注入直接获取数据 通过BOOL盲注获取数据 UNION肯定是最理想,但是这里无法使用,原因是用户这个输入会经过两次字段数量不同...因为表结构已经知道,成功获取用户、密码: 0x05 后台代码审计 这个注入漏洞优势是无需用户权限,但劣势是无法堆叠执行,原因我星球这篇帖子里有介绍过(虽然帖子里说是ThinkPHP)。...解决这个问题方法还是回归到代码审计,Cachet获取用户输入是使用graham-campbell/binput,我在前面审计时候发现其获取输入基础上会做一次过滤: public function

60620

站点选项 WordPress 插件:管理和删除无用站点选项

管理站点选项 安装好之后, WPJAM 菜单下会多出一个「站点选项」子菜单,点击进去,即可查看你站点所有非 WordPress 系统自动生成选项: 如果选项存储为字符串或者非序列化存储,则直接显示...用户管理 最强 WordPress 一键用户管理插件。 支持自定义头像,屏蔽个人设置,优化姓名设置, 隐藏登录名,限制登陆失败次数,防止密码被暴力破解等功能。...外部链接 将文章或评论外部链接加上安全提示中间页。 让用户确认之后再跳转,并还支持添加 nofollow rel 属性。 话题标签 文章插入 #话题标签#。...文章隐藏 设置文章列表⻚不显示,并且可以根据不同平台进行设置 Meta Data 可视化管理 WordPress Meta 数据,支持所有内置 Meta 数据: Post Meta,Term Meta...站点选项 查看和管理所有非 WordPress 系统自动生成站点选项。 如果你觉得某个选项无用,可以直接删除它。 后台论坛 WordPress 后台论坛,支持创建帖子,分组,消息。

97930
领券