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

 一、架构分享

        上一篇文章“从零到一“基于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.mzph.cn/news/587365.shtml

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

相关文章

深度神经网络结构

单层的感知机不能解决“异或”问题。 在前面分别介绍了M-P神经元模型和感知机模型。在M-P神经元模型中,神经元接收到若干个输入信号,并将计算得到的加权后的总输入,经过激活函数的处理,最终产生神经元的输出。而感知机模型则由两层…

腾讯云标准型S5服务器2核2G、2核4G和4核8G五年机来了

腾讯云五年特价服务器来了,标准型S5云服务器,可选2核2G、2核4G和4核8G配置,一次性购买五年低至2折,免去续费贵烦恼。腾讯云百科txybk.com分享腾讯云5年服务器特价优惠活动、购买条件、云服务器配置及优惠价格: 腾讯云五…

linux文件夹介绍

在linux内核文件夹下面存在着许多文件夹,那么那些文件夹是什么用处呢,下面将为你介绍。 (1)documentation 这个文件夹下没有内核代码,仅仅有一套实用的文档,但这些文档的质量不一。比如内核文档的文件系统,在该文件夹下…

计算机网络——传输层(五)

前言: 最重要的网络层我们已经学习完了,下面让我们再往上一层,对网络层的上一层传输层进行一个学习与了解,学习网络层的基本概念和网络层中的TCP协议和UDP协议 目录 ​编辑一、传输层的概述: 1.传输层: …

leetcode 315. 计算右侧小于当前元素的个数(hard)【小林优质解法】

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码: class Solution {int[]counts; //用来存储结果int[]index; //用来绑定数据和原下标int[]helpNums; //用于辅助排序 nums 数组int[]helpIndex; //用于辅助排序 i…

《Linux系统与网络管理》复习题库---shell编程题

1、shell 编程题:在根目录下有四个文件 m1.c,m2.c,m3.c,m4.c,用 Shell 编程,实现自动创建 m1,m2,m3,m4 四个目录,并将 m1.c,m2.c,m3.c,m4.c 四个文件分别剪贴到各自相应的目录下。 #!/bin/bash…

go module本地包导入

go module本地包导入 本文目录 go module本地包导入启用go mod主项目工作目录本地module目录发布和使用模块 golang 1.11之后加入了go mod来替代GOPATH 官方文档参考:https://golang.google.cn/doc/tutorial/call-module-code 启用go mod 开启 Go modules # 临时开…

【谭浩强C程序设计精讲 5】运算符和表达式

文章目录 3.3 运算符和表达式3.3.1 C运算符3.3.2 基本的算术运算符3.3.3 自增()、自减(--)运算符3.3.4 算术表达式和运算符的优先级与结合性3.3.5 不同类型数据间的混合运算3.3.6 强制类型转换运算符 3.3 运算符和表达式 3.3.1 C…

【Java】一文讲解Java类加载机制

Java 类加载机制是 Java 运行时的核心组成部分,负责在程序运行过程中动态加载和连接类文件,并将其转换为可执行代码。理解类加载机制,能更容易理解你一行行敲下的Java代码是如何在JVM虚拟机上运行起来。并且理解类加载机制之后,我…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤,持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成,使⽤的开源⼯具是Jenkins,CD指的是持续交付和持续部署,⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

CA和证书

安全机制 墨菲定律 如果有两种选择,其中一种将导致灾难,则必定有人会作出这种选择。即:做事不要有侥幸心理。 常用安全技术 认证、授权、审计、安全通信 加密算法和协议 对称加密算法 加密和解密使用同一个秘钥。 特性 加密、解密使…

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置:AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机,我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

修改css、html后前端没有刷新的解决方法(图文)

修改css、html后前端没有刷新的解决方法(图文) 修改css、html后前端没有刷新的原因和图文解决方法 1 原因 网页的缓存机制 2 解决方法 禁用网页缓存,具体操作如下 打开F12网络选项勾选禁用缓存。此时再刷新页面即可实时更新 以上就是全…

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞,元旦假期终于来啦!🎉在这个喜庆的时刻,电影院也热闹非凡,据猫眼专业版数据显示,截至12月30日,2023年元旦档首日票房竟然超过了4.69亿!这简直是个天文数字啊!&#x…

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

C:stack、queue、priority_queue增删查改模拟实现 前言一、Cstack的介绍和使用1.1 引言1.2 satck模拟实现 二、Cqueue的介绍和使用2.1 引言2.2 queue增删查改模拟实现 三、STL标准库中stack和queue的底层结构:deque3.1 deque的简单介绍(了解)3.2 deque的缺陷3.3 为什么选择dequ…

【2023 —— 我和CSDN相遇的第一年】— “技术学习和个人成长的回顾与展望”

​ ​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 🎊对2023的总结与回顾🎊 🏅获奖记录 📚学…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * ?” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

SpringBoot实用篇

SpringBoot实用篇 1、热部署 什么是热部署? 所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。 热部署有什么用? 节约时间,热…

OpenGL FXAA抗锯齿算法(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经提供了使用VCG读取Mesh的方式,接下来就需要针对读取的网格数据进行一些渲染操作了。在绘制Mesh数据时总会遇到图形的抗锯齿问题,OpenGL本身已经为我们提供了一种MSAA技术,但该技术对于一些实时渲染性能有…

【STM32】SPI通信

1 SPI通信 SPI(Serial Peripheral Interface,串行外设接口)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock,串行时钟)、MOSI(Master Output Slave Input&am…