“从零到一“基于Freeswitch二次开发: 应用架构设计(二)

news2025/1/20 12:04:15

 一、架构分享

        上一篇文章“从零到一“基于Freeswitch二次开发:Freeswitch入门与网络架构 (一) 对Freeswitch二次开发做了一个介绍,距离这篇文章的发布时间有点久了,之前一直没时间把下文补上来。正好到了年末想起来,就把我们的一个实现架构进行分享。

        我们自己开发移动端APP如安卓、IOS:

        1、移动端就是一个sip协议的客户端,可以通过Freeswitch服务器进行语音通信,Freeswitch再通过落地语音网关实现网络语音到PSTN网络的打通,使用开源的sip客户端SDK Linphone:

                Linphone SDK 项目地址: https://github.com/BelledonneCommunications

        2、关于Freeswitch的sip抓包监控,我们采用的是Homer这个开源sip监控项目,Freeswitch本身支持对接Homer,可以在Freeswitch中进行配置Homer监听地址,将整个sip协议流程数据写入Homer的数据库,之后再通过UI可视化界面直观进行问题排查

                Homer项目地址:   https://github.com/sipcapture/homer 

        3、Bill话单计费方式,我们将Freeswitch的话单通过生成文件的形式,通过Filebeat采集话单推送到Kafka消息队列,再通过计费消费者进行消费,生成话单数据,最后将话单数据推送到APP后端进行计费操作

        4、通过ELK技术栈将话单新建消费组消费数据后写入ES,可以通过ES进行话单数据统计、异常发现、异常排查,结合Homer定位到具体某一次sip协议的全过程

        5、为了保证计费的正确性和成本风险可控性,我们需要提供一个强制kill挂断某一次通话的相关接口。因为实际过程中可能会存在某种bug, 移动端已经挂了,但是Freeswitch还没有释放某一次通话,导致这个链路一直存在,如用户才30秒已经挂了,但是这个链路持续了10几分钟,那我收用户30秒的钱,但是运营商会收我10分钟的钱,那就会造成和线路方结算亏本问题。

        所以每次客户端挂断,我们都会通过sip id进行强制挂断操作,保证不会出现结算亏本问题。我们暂且叫这个HTTP服务为【ESL服务】,因为已经有开源SDK连接Freeswitch,所以我们采用的是Python Flask即可。

二、安全性保证

 1、HTTPS、SIPS协议

        在HTTP Web服务本身我们肯定想都不用想,直接上HTTPS来保证数据的安全性、站点身份的可靠性。

       sip协议本身也是明文进行传输,往往我们会忽略。 但是这个sip协议针对语音这样的APP安全性更为敏感。

        因为我们早期测试服就因为不是很重视,测试服就被sip疯狂灌水攻击,伴随着破解sip账号、密码很多的sip包。如果我们没有上SSL的话,传输过程中的sip账号、密码一旦泄露就会造成盗打问题,导致经济损失。

        所以Freeswitch支持SSL的方式,针对sip协议进行SSL加密,从而来保证sip协议非明文传输、站点身份可靠性验证。

 2、本地IDC与阿里云服务通信,通过SSH隧道交互

        我们某些服务进行了上云操作,但是某些应用只能在本地IDC机房。那么我们怎么方便监控云上的相关服务,或者如连接云上的MySQL、ES这样敏感的数据呢?

        1、放开安全组,限制IP地址进行访问。 这种方式最简单,但是不能避免数据明文公网传输,数据被窃取的问题。

        2、通过SSH隧道的方式,通过SSH隧道将阿里云服务与本地IDC机房打通,这样的方式相对第一种方式更加安全。

        我们就采用的是第二种方式。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端性能优化 将资源放到 linux 服务器上 提升访问效率

我们先远端连接服务器 然后服务器终端输入 mkdir 目录路径建出一个新的文件路径 回到我们自己的电脑 然后 在要缓存到服务器的文件目录下打开终端 输入 scp -r ./xidis.hdr 用户名 如果没设置用户名就是root服务器公网IP:/root/xhdr例如 scp -r ./xidis.hdr root1.113.266…

JavaScript基础知识点总结:从零开始学习JavaScript(六)

本章内容主要让小伙伴们自主练习 ,建议大家先自己写出来答案,然后对照我的!(题不难主要培养自己的编程思维!!!) 如果大家感感兴趣也可以去看: 🎉博客主页&…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀,一起来看看吧! 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境…

C#高级 08Json操作

1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式, 但是也使用了类似于C语言的习惯。这些特性使…

这儿有一道SPSS回归分析考试题,大家学会了吗?

为研究某地区房地产市场的价格与相关影响因素之间的关系,现从该地区采集了 20 份样本,数据如下表,请给出销售价格与相关影响因素之间的函数表达式,并从统计学角度分析这些因素之间的关系,最后预测 X 小区的平均销售价格…

java中的缓冲类HeapByteBuffer和DirectByteBuffer的区别

使用之前写的文章里的例子 https://blog.csdn.net/zlpzlpzyd/article/details/135292683 HeapByteBuffer import java.io.File; import java.io.FileInputStream; import java.io.Serializable; import java.nio.ByteBuffer; import java.nio.channels.FileChannel;public clas…

Tomcat与Servlet是什么关系

Tomcat与Servlet是什么关系 Apache Tomcat和Servlet之间存在密切的关系,可以说它们是一对密切合作的组件。下面是它们的关系: Tomcat是Servlet容器: Tomcat是一个开源的、轻量级的Servlet容器。Servlet容器是一个Web服务器扩展,用…

经典文献阅读之--OccNeRF(基于神经辐射场的自监督多相机占用预测)

0. 简介 作为基于视觉感知的基本任务,3D占据预测重建了周围环境的3D结构。它为自动驾驶规划和导航提供了详细信息。然而,大多数现有方法严重依赖于激光雷达点云来生成占据地面真实性,而这在基于视觉的系统中是不可用的。之前我们介绍了《经典…

php获取访客IP、UA、操作系统、浏览器等信息

最近有个需求就是获取下本地的ip地址、网上搜索了相关的教程,总结一下分享给大家、有需要的小伙伴可以参考一下 一、简单的获取 User Agent 信息代码: echo $_SERVER[HTTP_USER_AGENT]; 二、获取访客操作系统信息: /** * 获取客户端操作系统信息,包括win10 * pa…

一语道破爬虫,来揭开爬虫面纱

目录 一、爬虫(网络蜘蛛(Spider)) 1.1、是什么: 1.2、学习的原因 1.3、用在地方: 1.4、是否合法: 1.5、后果 案例: 二、应用领域 三、Robots协议 四、抓包 4.1、浏览器抓包 4.2、抓包工具 常见…

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners

DDAE: Denoising Diffusion Autoencoders are Unified Self-supervised Learners Paper:https://arxiv.org/abs/2303.09769 Code:https://github.com/FutureXiang/ddae TL; DR:扩散模型的训练其实就是训练一个去噪模型,考虑到类似…

竞赛保研 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖,适合作为竞赛课题方向…

Harmony全局应用生命周期 EntryAbility.ts 讲解

之前 我们说过 page页面的生命周期 组件的生命周期 其实他和uni一样有一个整个应用的生命周期 我们如下图打开EntryAbility.ts 这是我们整个程序app的状态控制 他这里也有几个全局的生命周期 比如 我们手机 点开当前 App 启动 app 会触发 它的 onCreate 生命周期 当我们从手…

【并发设计模式】聊聊等待唤醒机制的规范实现

在多线程编程中,其实就是分工、协作、互斥。在很多场景中,比如A执行的过程中需要同步等待另外一个线程处理的结果,这种方式下,就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现,以及对应的应用场景。 G…

Linux:apache优化(5)—— 隐藏版本号

防盗链:就是防止别人盗取你们公司的图片、文件、视频 作用:防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。运维人员可以通过apache提供rewrite模块进行优化。 配置项: RewriteEngine ON ##打开网页重写功能 RewriteCond …

微服务全链路灰度方案介绍

目录 一、单体架构下的服务发布 1.1 蓝绿发布 二、微服务架构下的服务发布 三、微服务场景下服务发布的问题 四、全链路灰度解决方案 4.1 物理环境隔离 4.2 逻辑环境隔离 4.3 全链路灰度方案实现技术 4.3.1 标签路由 4.3.2 节点打标 4.3.3 流量染色 4.3.4 分布式链路…

基于ssm的程序设计实践项目管理系统+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本实践项目管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

2023跨境电商年度总结:好用的跨境电商工具集合

不知不觉2023年已到了尾声,迎来崭新的2024年。经过年末旺季冲击的跨境电商,也来到了总结阶段。常言道工具选的好,工作轻松倍。在我们的跨境工作中少不得那些高效有用的工具加持。 接下来小编为大家盘点2023年度跨境工具网站,快来…

shell编程一

shell 定义 Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语 可以编写功能强、代码简短的程序 #! Shebang 定义解释器 shell的分类和切换 # cat /etc/shells /bin/sh…