Tuxedo介绍与安装


原文链接:http://www.cnblogs.com/fnng/archive/2013/02/10/2909860.html



Tuxedo 介绍与安装(一) 

本文目的

  Tuxedo 应用是性能测试的重点研究内容,作为性能测试人员,我们必须重点了解如何使用loadrunner 测试Tuxedo 应用。

 

 

Tuxedo介绍                                                                                  

 

Tuxedo 是什么

  Tuxedo是BEA公司(现已被Oracle公司收购)的一个客户机/服务器的中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务。它用C语言技术开发的并且有很高性能。

  TUXEDO是在、Internet 这样的分布式运算环境中开发和管理三层结构的客户/服务器型关键任务应用系统的强有力工具。它具备分布式事务处理和应用通信功能,并提供完善的各种服务来建立、运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。 

 Tuxedo 的主要作用是

  屏蔽分布式环境中各种通信协议、硬件体系结构、操作系统、数据库和其它应用服务等方面的差异,使分布于网络节点上的应用程序的各个单元部件之间能够进行互操作,并协调操作的一致性和完整性,最大限度地节省系统资源,提高系统性能。

  * Tuxedo 已经广泛地应用于金融、电信、制造业等各行各业的核心业务系统。

 

三层架构

 

三层架构:

 从左边往右依次为:客户端层(表现层),中间件服务层(业务逻辑层),数据库服务器层(数据层)。这种典型的三层架构应用非常广泛。

对于应用weblogic中间件的系统一般采用的B/S架构,绝大部分采用HTTP协议,少量的系统用java编写的客户端,使用的是RMI 协议,或J2EE里的其它协议。

对于tuxedo中间件使用的是tuxedo协议,前端开发工具可以是各式各样,VC++ java Delphi VB 等。

 

Tuxedo 的通讯过程

 

  Tuxedo 服务器处理请求的方式与apache有本质的区别。

  Apache服务器处理请求,由客户端发出请求到服务器,由服务器对请求进行处理后将数据返回给客户端。

  Tuxedo 服务器一次请求需要两次进行两次交互,Tuxedo有两个负责通讯的进程,一个为WSLWSL的数量可以进行配置,典型的配置一般两、三个;WSH可以有N多个。客户端通过IP地址和端口号与WSL建立连接,由WSL认证请求是否合法,在WSL的响应中包含了另外一个IP地址和端口号;然后,客户端通过拿到的新的IP地址和端口号去请求WSH 

  客户端程序由GUI 与 Tuxeo通讯两部分组成,GUI部分主要由开发人员关心如何设计,通讯部分可能设计成几个函数供开发人员调用。对于性能测试人员可能更关心客户端与服务器之间的通讯过程。

 

 

Tuxedo安装                                                                                   

 

Tuxedo 已经被oracle 公司

http://www.oracle.com/technetwork/cn/middleware/tuxedo/overview/index.html 

下载地址

http://www.oracle.com/technetwork/cn/middleware/tuxedo/downloads/index.html 

在下载之前要先用oracle 账户登录,如果没有的话要先注册一下。我选择的是:

Oracle Tuxedo 11cR1 (11.1.1.0)

适用于 Linux x86-32(32 位) 

我决定安装在cent OS 5.5  32位的虚拟机上。

windows 下的文件移动到 linux虚拟机我一直使用winSCP ,当然你也可以直接在linux上下载。

 

下面讲解安装过程

前期准备工作

复制代码
创建用户(可以省略):
[root@localhost tuxedo]# useradd oracle  //为安装程序创建有一个用户,并且程序的所属公司命名
[root@localhost home]# passwd oracle   //为创建的用户设置密码
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
 

为文件增加用户执行权限:
[root@localhost tuxedo]# pwd   //切换到下载文件的目录
/hzh/tuxedo
[root@localhost tuxedo]# ls -l   //查看用户执行权限
总计 168456
-rw-r--r-- 1 root root 172319751 02-05 22:19 tuxedo111120_32_Linux_01_x86.bin   //显然创建的用户对这个文件没有执行权限
[root@localhost tuxedo]# chmod 755 tuxedo111120_32_Linux_01_x86.bin   //添加权限
[root@localhost tuxedo]# ll
总计 168456
-rwxr-xr-x 1 root  root 172319751 02-05 22:19 tuxedo111120_32_Linux_01_x86.bin
[root@localhost hzh]# chown -R oracle:oracle tuxedo/    // 将tuxedo目录改为oracle用户拥有所有权限
[root@localhost hzh]# ll
总计 28
drwxr-xr-x 2 oracle oracle  4096 02-05 23:45 tuxedo

切换用户并执行:
[root@localhost tuxedo]# su - oracle    //切换用户为oracle
[oracle@localhost ~]$ cd /hzh/tuxedo/ 
[oracle@localhost tuxedo]$ ls
tuxedo111120_32_Linux_01_x86.bin
复制代码

 

 

[oracle@localhost tuxedo]$ ./tuxedo111120_32_Linux_01_x86.bin  -i console 

执行安装文件,-i console 使其在字符界面安装

复制代码
[oracle@localhost tuxedo]$ ./tuxedo111120_32_Linux_01_x86.bin  -i console
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing CONSOLE Mode Installation...

===============================================================================
Choose Locale...
----------------

    1- English

CHOOSE LOCALE BY NUMBER: 1   // 缺省只能选择1回车
===============================================================================
Tuxedo 11.1.1.2.0                 (created with InstallAnywhere by Macrovision)
-------------------------------------------------------------------------------
===============================================================================
Introduction
------------
InstallAnywhere will guide you through the Tuxedo 11.1.1.2.0 installation.


It is strongly recommended that you quit all programs before continuing with
this installation.
Enter "next' to proceed to the next screen. Enter "back" to modify the previous
screen.
You may cancel this installation at any time by typing "quit".


WARNING: "Quitting" creates an incomplete  Tuxedo 11.1.1.2.0 installation.You
must re-install  Tuxedo 11.1.1.2.0. For more information, see "Preparing to
Install the Oracle Tuxedo System" in the  Tuxedo 11.1.1.2.0 Installation Guide.


PRESS <ENTER> TO CONTINUE:
===============================================================================
Choose Install Set
------------------

Please choose the Install Set to be installed by this installer.

  ->1- Full Install
    2- Server Install
    3- Full Client Install
    4- Jolt Client Install
    5- ATMI Client Install
    6- CORBA Client Install

    7- Customize...

ENTER THE NUMBER FOR THE INSTALL SET, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
   : 1  //选择1

===============================================================================
Choose Oracle Home
------------------

    1- Create new Oracle Home

  Enter a number: 1   //选择1 ,把服务器与客户端都装好

  Specify a new Oracle Home directory: /hzh/tuxedo  //指定安装的目录/hzh/tuxedo (这只是我的目录,你随意!)

===============================================================================
Choose Product Directory
------------------------


    1- Modify Current Selection (/hzh/tuxedo/tuxedo11gR1)
    2- Use Current Selection (/hzh/tuxedo/tuxedo11gR1)

Enter a number: 2  // 1修改目录,选择2 项,默认目录。
Install Samples (Y/N): y  // y 回车

===============================================================================
Pre-Installation Summary
------------------------

Please Review the Following Before Continuing:

Product Name:
    Tuxedo 11.1.1.2.0

Install Folder:
    /hzh/tuxedo/tuxedo11gR1

Link Folder:
    /home/oracle

Disk Space Information (for Installation Target):
    Required:  209,943,511 bytes
    Available: 5,742,436,352 bytes

PRESS <ENTER> TO CONTINUE:  //上面罗列安装目录信息,这里回车即可


===============================================================================
Ready To Install
----------------
InstallAnywhere is now ready to install Tuxedo 11.1.1.2.0 onto your system at
the following location:

   /hzh/tuxedo/tuxedo11gR1

PRESS <ENTER> TO INSTALL:

===============================================================================
Installing...
-------------

 [==================|==================|==================|==================]
 [------------------|------------------|------------------|------------------]

===============================================================================
Configure tlisten Service
-------------------------

Password:
Verify Password:
Password Accepted! Please wait...

===============================================================================
SSL Installation Choice.
------------------------
Would you like to install SSL Support?  //你想安装的SSL支持吗?

  ->1- Yes
    2- No

ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT:
   : 2   // 这里选择不支持


===============================================================================
Installation Complete
---------------------

Congratulations. Tuxedo 11.1.1.2.0 has been successfully installed to:



   /hzh/tuxedo/tuxedo11gR1

PRESS <ENTER> TO EXIT THE INSTALLER:  // 这里回车,所有这装完成
复制代码

 

安装完成,进入安装的目录:

[oracle@localhost tuxedo11gR1]$ pwd

/hzh/tuxedo/tuxedo11gR1

[oracle@localhost tuxedo11gR1]$ ls

bin         help     inventory  lib     samples  udataobj

cobinclude  include  jre        locale  tux.env  uninstaller

 

这里需要注意的是,老的版本需要下载lic.txt文件复制到...tuxedo_xx/udataobj目录下面进行注册才可以使用。最版本的可以免费使用。

安装完成确认

切换到tuxedo安装目录下,为tux.env文件添加执行权限。

[oracle@localhost tuxedo11gR1]$ chmod 755 tux.env

[oracle@localhost tuxedo11gR1]$ .  ./tux.env

[oracle@localhost tuxedo11gR1]$  env | grep UX

TUXDIR=/hzh/tuxedo/tuxedo11gR1

[oracle@localhost tuxedo11gR1]$ tmadmin -v 

INFO: Oracle Tuxedo , Version 11.1.1.2.0, 32-bit , Patch Level (none)




原文链接:http://www.cnblogs.com/fnng/archive/2013/02/15/2912884.html



Tuxedo 通讯方式解析(二)

 

      上一节简单介绍了tuxedo 是什么,并且详细介绍了安装过程。我们学这个的目的就是让其能够跑起来,这一节就根据tuxedo自带samples的例子,让其运行起来。并通过这个例子,深入的理解tuxedo的通讯方式。

 

进入tuxedo的安装目录,samples目录下自带了一些例子

[root@localhost atmi]# pwd

/hzh/tuxedo/tuxedo11gR1/samples/atmi

[root@localhost atmi]# ls

bankapp    CSIMPAPP   qsample  simpapp   ws         xmlstockapp

creditapp  libutrace  rpcsimp  STOCKAPP  xmlfmlapp

 

凡是了解tuxedo 的同学都知道这里面有个著名的例子 simpapp ,它的作用就是把客户端发送的小写字母转换成大写字母返回给客户端。我们就把这个例子运行起来。

前期准备:

[root@localhost atmi]# cp -R simpapp/  /hzh/tuxedo/  为了便于操作,把simpapp 拷贝到/hzh/tuxedo/ 目录下面。

[root@localhost tuxedo11gR1]# ls

bin         help     inventory  lib     samples  udataobj

cobinclude  include  jre        locale  tux.env  uninstaller

[root@localhost tuxedo11gR1]# cp -R tux.env  /hzh/tuxedo/simpapp/        把tuxedo 安装目录下的tux.env  配置文件拷贝到/hzh/tuxedo/simpapp/ 目录下

 

[root@localhost simpapp]# pwd

/hzh/tuxedo/simpapp

[root@localhost simpapp]# ls

README  simpcl.c  simpserv.c  tux.env  ubbsimple

 

配置运行 simpapp 例子                                                                           

 

配置tux.env文件

[root@localhost simpapp]# vi  tux.env  对配置文件进行修改

复制代码
TUXDIR=/hzh/tuxedo/tuxedo11gR1; export TUXDIR
JAVA_HOME=$TUXDIR/jre; export JAVA_HOME
JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR

APPDIR=/hzh/tuxedo/simpapp; export APPDIR
TUXCONFIG=$APPDIR/tuxconfig; export TUXCONFIG
LANG=C; export LANG
复制代码

 

 

配置ubbsimple 文件

[root@localhost simpapp]# hostname  //查看本机hostname

node1

[root@localhost simpapp]# vi  ubbsimple 

复制代码
#       (c) 2003 BEA Systems, Inc. All Rights Reserved.
#ident  "@(#) samples/atmi/simpapp/ubbsimple    $Revision: 1.7 $"

#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the <bracketed> items with the appropriate values.

*RESOURCES
#IPCKEY         <Replace with a valid IPC Key>

#Example:
IPCKEY          123456

DOMAINID        simpapp
MASTER          simple
MAXACCESSERS    10
MAXSERVERS      5
MAXSERVICES     10
MODEL           SHM
LDBAL           N

*MACHINES
DEFAULT:
                APPDIR="/hzh/tuxedo/simpapp"
                TUXCONFIG="/hzh/tuxedo/simpapp/tuxconfig"
                TUXDIR="/hzh/tuxedo/tuxedo11gR1"
#Example:
#               APPDIR="/home/me/simpapp"
#               TUXCONFIG="/home/me/simpapp/tuxconfig"
#               TUXDIR="/usr/tuxedo"

node1   LMID=simple    //node1为本机hostname名

#Example:
#beatux         LMID=simple

*GROUPS
GROUP1
.......
复制代码

注意:APPDIR、TUXCONFIG和TUXDIR三个选项的路径要与 tux.env 文件中的配置保持一致。

修改完成,保存退出

[root@localhost simpapp]# . ./tux.env

[root@localhost simpapp]# tmloadcf -y ubbsimple           //运行此命令不出出任何提示,表示一切正常

[root@node1 simpapp]# buildserver -f simpserv.c -o simpserv -s TOUPPER         //编译服务器端程序

[root@node1 simpapp]# buildclient -f simpcl.c -o simpcl            //编译客户端程序

  这里需要说明的是,buildserver和buildclient命令需要系统安装gcc 才能被执行,gcc -v 查看本机是否安装GCC ,这里就不介绍gcc的安装了。

 

[root@node1 simpapp]# tmboot -y  启动进程

复制代码
Booting all admin and server processes in /hzh/tuxedo/simpapp/tuxconfig
INFO: Oracle Tuxedo, Version 11.1.1.2.0, 32-bit, Patch Level (none)

Booting admin processes ...

exec BBL -A :
        process id=2628 ... Started.

Booting server processes ...

exec simpserv -A :
        process id=2629 ... Started.
2 processes started.

[root@node1 simpapp]# ps -ef  查看启动进程

root      2628     1  0 12:21 pts/2    00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root      2629     1  0 12:21 pts/2    00:00:00 simpserv -C dom=simpapp -g 1 -i
root      2634  2558  0 12:23 pts/2    00:00:00 ps -ef
// 能找到上面几个进程表面已经启动成功
复制代码

验证

[root@node1 simpapp]# ./simpcl hello

Returned string is: HELLO

客户端发送一个小写的hello ,服务器端将返回一个大写的HELLO

[root@node1 simpapp]# tmshutdown -y   //停止进程

 

IPC  &  TCP/IP                                                                                     

 

  通过上面的配置,我们将tuxedo 一个小例子跑起来了,但是目前客户端与服务器同在一台机子上,同在一个机子上所使用的协议是IPC ,而我试验的环境是在win 7 下的下的虚拟机上运行centOS ,那么如何在win 7 下发送请求到centOS上呢?

 

  IPC inter Process Communication (进程间通讯),适用于同一台机子上进程与进程之间的通讯。IPC 包括共享内存,队列,信号量等几种形式。通过IPC的方式通讯效率高。

如果两个进程分别在不同的机子上想实现通讯,就要走TCP/IP协议。

复制代码
[root@node1 simpapp]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:48:F5:9C
          inet addr:192.168.0.107  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe48:f59c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:932 errors:0 dropped:0 overruns:0 frame:0
          TX packets:693 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:79614 (77.7 KiB)  TX bytes:89327 (87.2 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:5895 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5895 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:9015156 (8.5 MiB)  TX bytes:9015156 (8.5 MiB)
复制代码

  结合上面信息再来分析,一台主机上的一个进程要想与另一台主机上的进程实现通讯,先将信息发送到eth0 网卡中,通过网线传输到另一台主机的eth0网卡,再由网卡传给另一个进程。

  lo local Loopback 表示本地环路,lo是一个特殊的网卡,两个进程之间通讯可以使用IPC协议,如果要使用TCP/IP协议的话就要通过lo这个特殊的网卡进行通讯。

 

 

通过上面的分析,我们知道两个进程间通讯有三种方式。

两个进程在同一台主机上:

  一:通过IPC协议,使两个进程直接通讯,效率高。

  二:通过TCP/IP协议,使用lo特殊网卡时行通讯。

两个进程在不同的两个主机上:

  三:通过TCP/IP协议,使用eth0物理网卡进行通讯。

 

 

配置第二种方式通讯                                                                                 

 

  我们现在使用的是第一种通讯方式,下面我们要将上面的修改的文件重新修改配置,来完成第二种方式通讯。

修改tux.env文件

复制代码
TUXDIR=/hzh/tuxedo/tuxedo11gR1; export TUXDIR
JAVA_HOME=$TUXDIR/jre; export JAVA_HOME
JVMLIBS=$JAVA_HOME/lib/i386/server:$JAVA_HOME/jre/bin
PATH=$TUXDIR/bin:$JAVA_HOME/bin:$PATH; export PATH
COBCPY=:$TUXDIR/cobinclude; export COBCPY
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"; export COBOPT
SHLIB_PATH=$TUXDIR/lib:$JVMLIBS:$SHLIB_PATH; export SHLIB_PATH
LIBPATH=$TUXDIR/lib:$JVMLIBS:$LIBPATH; export LIBPATH
LD_LIBRARY_PATH=$TUXDIR/lib:$JVMLIBS:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
WEBJAVADIR=$TUXDIR/udataobj/webgui/java; export WEBJAVADIR

APPDIR=/hzh/tuxedo/simpapp; export APPDIR
TUXCONFIG=$APPDIR/tuxconfig; export TUXCONFIG
LANG=C; export LANG
WSNADDR=//192.168.0.107:3200; export WSNADDR
复制代码

 

 

修改ubbsimple文件

复制代码
.......................
*MACHINES
DEFAULT:
                APPDIR="/hzh/tuxedo/simpapp"
                TUXCONFIG="/hzh/tuxedo/simpapp/tuxconfig"
                TUXDIR="/hzh/tuxedo/tuxedo11gR1"
#Example:
#               APPDIR="/home/me/simpapp"
#               TUXCONFIG="/home/me/simpapp/tuxconfig"
#               TUXDIR="/usr/tuxedo"

node1   LMID=simple
        MAXWSCLIENTS=5
#Example:
#beatux         LMID=simple

*GROUPS
GROUP1
        LMID=simple     GRPNO=1 OPENINFO=NONE

*SERVERS
DEFAULT:
                CLOPT="-A"

simpserv        SRVGRP=GROUP1 SRVID=1
WSL             SRVGRP=GROUP1 SRVID=10   //增加一个WSL侦听进程
                CLOPT="-A -- -n //192.168.0.107:3200"  //IP地址为本机IP,端口号3200可以任意取,与tux.env 文件中的WSNADDR参数保持一致

*SERVICES
TOUPPER
复制代码

 

 

[root@node1 simpapp]# tmloadcf -y ubbsimple       // 编译文件

[root@node1 simpapp]# buildclient -f simpcl.c -o ws -w        //重新编译客户端,ws 为编译的可执行程序,-w 参数表示客户端的编译是按照TCP/IP方式通讯的。

[root@node1 simpapp]# tmboot -y     //启动进程

[root@node1 simpapp]# ./ws hello

Returned string is: HELLO

 

 

分析第二种通讯方式                                                                                 

 

  我们在ubbsimple文件中配置了 WSL 参数

WSL         SRVGRP=GROUP1 SRVID=10  
                  CLOPT="-A -- -n //192.168.0.107:3200"

 

 参数指向的IP为本机IP,在tux.env 文件中同样需要指定本机IP 

 

使用tmboot -y 命令启动进程:

 

复制代码
[root@node1 simpapp]# tmboot -y   启动进程
[root@node1 simpapp]# ps -ef   查看进程
root      3402     1  0 18:03 pts/2    00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root      3403     1  0 18:03 pts/2    00:00:00 simpserv -C dom=simpapp -g 1 -i
root      3404     1  0 18:03 pts/2    00:00:00 WSL -C dom=simpapp -g 1 -i 10 -u
root      3412  2580  0 18:07 pts/2    00:00:00 ps -ef
复制代码

 

 客户端向tuxedo服务器发请求,由WSL进程处理,并返回另外一个IP及端口。客户端拿到IP及端口去访问真正的WSH进程。那为什么WSH进程为什么没有启动呢? 这是因为WSH进程是在客户端发送请求后自动生成的。

[root@node1 simpapp]# ./ws hello  //向服务器端发送请求

Returned string is: HELLO

复制代码
[root@node1 simpapp]# ps -ef   查看进程
root      3402     1  0 18:03 pts/2    00:00:00 BBL -C dom=simpapp -g 30002 -i 0
root      3403     1  0 18:03 pts/2    00:00:00 simpserv -C dom=simpapp -g 1 -i
root      3404     1  0 18:03 pts/2    00:00:00 WSL -C dom=simpapp -g 1 -i 10 -u
root      3421  3404  0 18:12 pts/2    00:00:00 WSH -c 11 -i 0 -s 3375121 -p 204
root      3423  2580  0 18:12 pts/2    00:00:00 ps -ef
// 这里已经生成了WSH进程
复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值