Everybody Likes Ninjas

Working with Azure 10 tip for day to day work part II

Sunday, 6 February 2011 09:47 by Guy

Guy

In the last six months many new features, improvements and changes have accorded in the Azure platform most are from the technology side, as the system matures new lessons are learned and new features are created as the result of a feed cycle between the Azure development team and the user community. Below are three issues we have dealt with in the last three months.

Technology

6) Disaster recovery for web services requires 2 instances

Part of hosting in cloud platform is receiving the 99.9… uptime, without the extra cost of expensive network gear, redundant hardware and an on the payroll IT employees. Azure solution promises the 99.5 uptime for it services, it is a built in function for Azure CDN, Storage and SQL, yet to achieve the same for a web role you have to upload at least to instances. Apparently the issue was not so clear to many, so a new warning massage was added in the management and development interface.

Image 1 : mutipal instances

7) Improve your availability

Using more than one instance is not enough, I would strongly suggest putting to usage the “Upgrade Domains and Fault Domains” settings. A “Fault Domain” is a physical allocation of hardware serving your application, for instance two different server racks. If you have uploaded two instances or more the app fabric is responsible to use at least two “Fault Domains”. That way if hardware unit fails at least one instance will keep on running.
“Upgrade Domains” is a logical grouping of your instances, the default is 5 domains the Azure app fabric will make sure these domains are located on more than one “Fault Domain”. Why would you need an “Upgrade Domain? Well when Microsoft is upgrading the servers it will upgrade one upgrade domain at a time if your servers are divided to several “Upgrade Domain” there will not be a point in time when all your instances are down.
To learn more check the following blog post "Service Runtime in Windows Azure" .

-There is one catch hidden in this process; let’s say you have 3 live instances all working in the capacity of 70%, your total used capacity is 210% out of 300%. Now one of the servers is undergoing maintenance which leaves you with a total capacity of 200% where will the remaining 10% go to?

8) Place your services close together

As ambiguous as the cloud platform is the servers are located at a physical location and network has an impact on your application performance and your client user experience. Obviously you should select a physical hosting solution as close as you can to the majority of your clients, but that is not enough placing your application modules that communicate with each other is even more important. If you are using SQL Azure or Azure Storage solution with collaboration of Azure Hosted services, place the services at the same physical location ( and no the regions Anywhere US and South Central US are not the same) if you decide to place services in multiple location closer to your client don’t rely on network connection across sits, consider duplicating your SQL Azure DB and using the sync service to replicate data across the different DB instances, that way your application and DB services will be located in the same place.

New features - Missing a feature you are probably not the only one

9) DB instance can be scaled

Web or business edition that was hard decision when we started our SQL Azure project leaving business edition performance advantage aside, size was a big factor. To increase your DB size from 1GB to 10 GB required a new instance and the coping of the data to the new instance while keeping some kind of sync process going on while the application servers are being rerouted to the new DB server. Now multiple that by the number of your clients !!! and try to explain the downtime or why you have to change their in-house ETL process.
Well the new version of SQL Azure allows you to change the DB size on the fly both for the web edition and the business edition.
Farther more having a 50GB combining with the new SSRS reporting system brings new possibilities for a mini datamarts in the cloud.

10) You can host multiple subdomain on one web roll

Filling we are not getting all we can from our instances (remember the multiple instances issue) we decided to upload more than one web site on our instances. Sadly you can upload only one web role per instance and there is no way around it. Yet from Azure documentation we knew you can host multiple web sites on the same web role using endpoint on different ports, but who will ever want to host his web site on a port other than 80? After looking for a solution, we approached Microsoft Azure support center; within 24 hours a blog post was published with a solution tailored for our needs.

How does it work ? the web role imitates the behavior of an IIS by setting a different host header entries the web-roll diverts the traffic to a different “website”.

Up until now if you had three clients each requires two instances (web-servers) and use a constant of 120% computing power, you had to upload each client on a three server group and only one server in the group could be down at a time. By uploading all three client applications to 6 servers instead of 9, utilizing 360% out of 600% available computing power, the new setting increases your availability and redundancy and at any point in time you can have two servers down and still have more the 360% CPU power, not to mention saving the cost of 3 instances!!!

New feature are being added to the different cloud solution at an amazing rate, and the development community is filling the web with new request and replacements for missing feature, such as fulltext search and comparison tools. If you run into a dead end, you must remember you are probably not the only person out there with this issue Google it or contact the support center, the solution is out there.

Guy

Working with Azure tips on day to day work part I

Wednesday, 26 January 2011 10:33 by Guy

Guy

In the former posts I have been writing about the theory of working with Sql Azure and Azure as part of our introduction in to the Azure beta program, well this month we have uploaded the second version of our application integrating new technology additional computing power and an Sql Azure DB. We have learned a lot in the process, I would like to share the top 10 insight in maintaining, managing, building and uploading a live application to Azure cloud.

Reduce your expenses

1) Select the program best suited your needs

There are many rate programs for Azure it can start with an 87$ for a small server and ends with free for MSDN Premium subscribers After you have selected the program most suitable for you, you can change to another program without any down time by sending a request to Azure support team. By doing so you can to start with one of the free programs and then easily migrate to another program as your requirements change.

2) Delete your staging servers !!

Yes, you pay for your staging servers. You pay for every server even servers that are in the stop state, that is because the resources for that server are still assigned to it. Therefor when you are done with staging server don’t just stop the server - delete it. Microsoft even added a remark in that spirit to their management console and documentation.

3) Scale on demanded

This is the essence of cloud computing, you don’t have to start with the best the biggest servers, you don’t have to buy servers that will accompany you till your next farm upgrade. Start with the Extra Small Server and 1G DB for a soft launch; it takes maximum 15 minutes to add extra servers and 10 to upgrade your DB storage (http://msdn.microsoft.com/en-us/library/ee621788.aspx), and billing for the upgraded resources starts when they are up and running.

Tools provided by Microsoft

4) New cool management interface

Image 1 : Azure Portal

Microsoft has released a silverlight base management portal that supports the management of Azure components from virtual networks to hosted services. The application is slick fast and gathers all the information in one place, you can add new instances or new DBs, change configuration setting or delete existing resources from one interface

5) Support center

Azure support service is amazing, each time I have asked for a support either billing or development issues I got an answer within 24 hours with a follow-up email every 24 asking if I need an additional support and if I approve the closing of the case.. They implemented an escalation process up to the development team level if required, and in more complicated cases I received phone call from the support rep with an automated escalation up the support chain till the issue was resolved.

The service is free and working smoothly, in comparison try amazon AWS support, it cost an organ and the service, god help me, wasn’t even the S of Service.

Next post top 5 tech tips for working with Azure .

Guy

SSAS Reports in Reporting Services

Thursday, 24 June 2010 08:10 by Guy

Guy

Microsoft is working hard on pushing a SharePoint server and integrating every reporting aspect in it, from the new PivotTable to PerformancePoint server. Yet, in the same sentence, they claim that SharePoint is for medium to enterprise organizations. What if you don’t work for an enterprise size organization and you don’t install software you don’t have the licenses for?

Well, I don’t work for an enterprise size company and we really don’t have a use for the entire SharePoint server features we ate just looking for a tool to share our report, which leaves me with original reporting application that bundles with SQL Server – SSRS (SQS Server Reporting Services).

Building reports in SSRS for SSAS has never been a straight forward task, especially if you want to integrate parameters and conditional execution. It seems that with every version, the connection between SSRS and SSAS is getting stronger, yet even with report builder 3, building a report that slices the information using dimension members or sets is still a confusing task.

To successfully build an SSAS report using parameters, you should forget the work flow used for building T-SQL reports, the process must be broken into several building blocks and at the end “manually” connect between them. I have broken down the development process to the following building blocks:

  • Data Source – the connection to the SSAS server
  • Data Set –
    • Filed list- a list of fields returned by the query used to bind the results of the query to the report form.
    • Parameters – parameters are usually used to slice the results of the query. There are two major types: filters using dimension members that are presented as a checkbox tree on the report form and regular parameters such as date ranges that will be presented as text fields or datetime pickers
    • Query – the actual query running the query. Due to the limitation of the query builder, you will probably have to replace it using your own MDX code.
  • Report designing – the actual report page displaying the results.

Creating a Data Source is very similar to a creating a SQL Data Source, I strongly suggest you create a shared connection that will be reused by all the reports in the same project. If you want to use the active directory security feature to limit the viewed data or the actual report, change the connection string on the production server to use the current user credential. While developing, either use your own user or set an admin privilege user. Also using the query designer (will be explained later) takes a considerable amount of time creating connection to the DB server and retrieving the data, so while developing I work with my development SSAS server located in the same network as my development desktop.

Report designing is also pretty straight forward and very similar to creating a T-SQL report. When you have reached the final stage of designing the report, and you find that you need to add a new calculated field, it is easier to add it to grid than to go through all the steps for adding a new field in the query designer.

The trick in the process is creating a dynamic Data Set. I usually launch the process with the query designer, using it to create all three groups. Afterwards I manually manipulate them to add the missing features and join them back together. I will create a simple report presenting the revenue of my demo publisher per month, then I will manipulate the Dataset turn it into a dynamic report that will allow the user to select the time span, certain publishers and specific countries.

Right click the Data Set folder and click add DataSet. Select the DataSource and click the query designer button (see image 1). In the query designer popup window, build your query by dragging and dropping from the left side menu (presenting the SSAS DB objects). The queries designer is limited compared to what you can do with an MDX query. We will take care of that in one of the next steps; just make sure the fields you want to display in the report are selected. When you are done, click the OK button. Saving the query will create the field list that we will use later in the report. In the image below I have selected one measure revenue and two dimension member’s month and publisher from two different dimensions. The result you see is the revenue of our Demo account. Since I aim to build a dynamic report, I will use the query builder to add the dimension based parameters by dragging the dimension to the filter section and setting them as parameters using the parameter check box. Marking the parameter check box is creating the parameter and a hidden Dataset that will retrieve the values for the parameter check list form the dimension in the SSAS. At this point we are missing the date slicing parameters, you can add a manual parameter at this step, yet the query designer does not recognize a parameter defined outside the query designer. I will add parameters manually in one of the next steps.

Image 1 : QueryDesigner

After clicking OK, you will go back to the Dataset Properties window. In the Field tab you will see the list of the fileds we have selected in our query design (see image 2).

Image 2 : FieldList

In the parameter tab, you will see two new parameters (see image 3) bound to our query. The parameters get their names from a dimension structure. I always change them to something more useful and readable. Click OK to close the window and save the definition.

Image 3 : Paramters 1

My next step will be to add two new parameters: FromDate and ToDate. These are two regular date-picker parameters. Close the Dataset properties window and right click the parameters folder on the reports data window (left side menu). Select ‘add new’ and set the required properties. Set the name, type and default value and don’t forget the ‘never refresh’ in the advance tab. At the end, we can see a list of four parameters (see image 4).

Image 4 : Paramter List

Now, back in the Dataset properties window, we will bind them to our query. In the parameter tab, click ‘add’. Select the parameter from the dropdown menu and set a corresponding name (see image 5).

Image 4 : Paramter 2

Now we are at the final step, where we manually change our query and combine the new parameters. We cannot use the query designer for the next step it will ignore our manual settings a return the configuration to the state. I have to write my own MDX query (yes, there are IT guys that know SQL Server at a DBA level, build reports in SSRS, Cubes in SSAS and knows how to write MDX queries). In order to accomplish that in the Query tab, I will edit the query by clicking the FX button (marked in red in image 6). Explaining the DMX syntax is out of the scope of this post. I simply added the following code to include the usage the date parameters:

FROM ( SELECT ( STRTOMEMBER( "[TimeH].[YQMDH].[Date].&[" + Format(@FromDate, "yyyy-MM-dd") + "T00:00:00]" , CONSTRAINED) : STRTOMEMBER( "[TimeH].[YQMDH].[Date].&[" + Format(@ToDate, "yyyy-MM-dd") + "T00:00:00]", CONSTRAINED) ) ON COLUMNS FROM …..

After changing the query and adding parameters, you cannot update the field list. The Dataset properties window can’t cope with the manual changes, so if you are asked to update the list. Choose the cancel button; you can always do it manually later.

Image 4 : Query

Now you are ready to build your report. Select the table component, then drag and drop the fields from the field list. When you execute the report, the new parameter will appear at the top of the report.

These are the basic try adding fields into the field list, adding custom set and members. Ping me if you like to hear more.

Guy

Categories:  
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

How easy is it to embed Ads into a flash player?

Wednesday, 3 March 2010 10:52 by Ziv

Ziv

Call me biased. But I have been a .NET developer for almost 10 years and before that when I was a Java programmer I still used Visual Studio (Remember Visual J++).
And for me it's the best editor a guy can have (if you don't count that fact that it’s slow and heavy).

When I joined TicTacTi I started programming also in AS2 and then AS3. When asking other flash developers, sorry flash designers what editor they are using they all said CS3 with a big smile. But a developer can’t ask a designer a question like this. CS3/4 and probably also 5 are made for designers and not developers and if you like to write more than 10 lines of code don’t go near this editor.

When we started to write in AS3 we started using Eclipse.
Well, this is an editor. But it’s an Open source editor and as such it takes 10 manual pages and 2 full days to learn how to install it so it will compile a simple hello world application. (Why can’t open source application use the wizard concept?J)

At first I had problem understanding the Perspective issue, or the fact that F3 is not used for search.
After awhile I even found out that you can do things with it that you can’t in Visual Studio like compile on the fly, move few rows at once (using Ctrl+Up/Down arrow)
But, what cracks me was a simple task I had to do. I like to compile the code and then run a simple batch file. Simple??? Yes it’s simple if you understand how to write ANS, or some other compiler code. In VS a simple checkbox would allow me to run as much batch file as I like.

I will say this I’m working with Eclipse but every few months I’m looking at different add-on that allow you to write AS code using VS. So far it takes about 10 min of work before I find out that something is missing and the add-on is not ready yet for a real AS application.

So far the Tofino is the best add-on but it’s still isn’t perfect, although I must say that their support team is doing a great job and they did try to help me migrate to Tofino.

I will update this post when I will find a good add-on because I’m sure I will not be an Eclipse developer forever.

Tags:   , , ,
Categories:   Dev Life | Dev Life | Flash | Flash
Actions:   E-mail | del.icio.us | Permalink | Comments (2) | Comment RSSRSS comment feed

Scaling SQLAzure

Monday, 15 February 2010 08:23 by Guy

Guy

If your company is planning on using the Azure platform and SQL Azure for a high load OLTP application, you should change the way you think about application and database design.

The limitation on SQL Azure described in my former post, will force you to think differently regarding scaling your applications. Application wise, you must take into consideration that long running queries will be disconnected by the SQL Azure server and connections which are open for a long period over the internet, tend to disconnect due to network issues.

To limit the effect of these issues you should implement the following:

  • Connection polling in your application (built-in feature using .Net), will reduce the load on the database server. Connection polling also saves resources on creation and reduces the latency of creating a connection over the internet.
  • Use short transactions\batches, open the connection in the last second, execute the query commit and close the connection as soon as possible.
  • Implement retry mechanism in the events you get disconnected or unable to create the connection over the internet.

When you considering scaling options, since you don’t have any control over the hardware resources, scaling out is your only option. You have several options for scaling out, depending on your application. All of them will require a logic method in your application that will select the appropriate connection string, or in other words: your application must be partition aware.

Let’s review some of the options:

  • One Database per client- if you are a SaaS provider, you can open a database per client. This option has a few advantages: privacy and security wise, each client has its own database. Billing wise, you can bill your client just for SQL Azure recourses their database is using (see below: Master DB).
  • Configuration Database – if your database holds static information, updated once in a long period of time, you can create multiple copies of your database using Sync Framework to synchronies the changes from the primary one. You will also need to add a round robin method on your application side to select the connection string and distribute the load on the different instances.
  • Logical partitioning or Elastic provisioning– what if your application design allows that? You might be able to separate your data according to a natural key. Could be as easy as modulo 10 your client user id or opening a database per country\game\event … in your application. Of course, that too will require changes in the application connection string module logic. One company all ready implementing such a solution is www.ticketdirect.com. You can read more on Microsoft Case Studies.

I just had the privilege to join a closed Microsoft Connect session on SQL Azure . It seems that some new exiting features are on the way, which will help with scaling. Some of the performance execution limitations will be reduced and a new clone feature is being developed to help with instantly creating copies of your database for scale out usage and backup.

To enable the partitioning process, Master DB has changed considerably: it no longer sits at the center of the SQL Server and two new role gateways were added to login operation and logger of usage operations.

The login process uses two tables of sys.sql_logins for the login operation a new table sys.firewall_rules for configuring access to the “DataBase Server”. A successful login must be backed up with valid data in both tables (information about the login process can be found in my former post).

The second role as an activity logger for billing process is back up by two new tables named sys.bandwidth_usage sys.database_usage. By monitoring the values on these tables, you can calculate the operation cost of any single DB and add it to your client billing quote or monitor the operation cost of an event on your system.

Guy

SQL Azure

Monday, 25 January 2010 10:52 by Guy

Guy

Sql Azure is Microsoft’s solution for relational database cloud computing, it comes as part of Azure platform. As with the Azure platform in general, to implement such a solution many limitation were placed on the Azure version of SQL server. The implantation as technical solution is amazing and requires some IT background to figure the complexity of the solution.

The best place to start the explaining SQLAzure is with describing the infrastructure. As a user you are granted with a token, this token is used to create all your databases. First DB to set up is the Master DB, very similar the SQL Server Master DB(more on the functionality of the Master DB in the next post). All traffic to the SqlAzure “Server” is routed through a firewall that allows you to limit the accesses to specific sources using a well design web interface. Then the connection is rerouted to a gateway that diverts the connection to the current server hosting the online copy of your database. All SQL server instances that build the SQLAzure platform are installed on cluster machines to support high availability to improve availability the created database is automatically replicated across different machines . In the case of failure the gateway will automatically point to the current online database instance.

sqlazure

To increase scalability of your application and to maintain overall balances of the SQLAzure platform servers, your databases are placed across multiple servers. I.E. even though it looks like it, physically the your company databases are not placed on one server! What actually happens is that several companies share the same hardware! So how do you reach a specific database? The trick is in the login : the connection string must include the destination database, your connection undergoes authentication using the login setting saved in the Master DB and then diverted to the requested database that will probably be located on a different server.

Farther more to allow a fair resource distribution between the different databases and SQLAzure clients, several limitations are set on the databases settings and resource utilization. A detailed list of the limitation can be found in the following link, I bring the highlights:

  • The major change is that can’t manipulates local resources:
    • There is only one file group per database.

      The following technical resources are a good starting point to understand the SQLAzure platform :

    • No partitioning.
    • No fill factor.
    • No user define data types.
    • No full text indexes.
    • No memory settings or any other server level settings.
  • All tables must include a clustered index.
  • Each connection can only function in the boundaries of the database it is connected to.
    • No Trace or Profiler, due to the fact that when you connect to a specific DB you can interact with the Master DB .
    • Can’t use the USE <database> command.
    • Can’t use distributed transactions or queries.
    • Can’t use global temp tables.
    • No service broker
  • All logins are sql server logins, there is no domain support.
  • Maximum database size of 10G.
  • No SSIS or SSAS support
Connection throttling, to support fair resources distribution, is placed in the form of limitation on
  • Execution time limited to 5 min
  • Maximum open connection time
  • Limiting long running transactions and extensive resource usage CPU and memory.

These limitations will actively disconnect the client connection and STOP QUERY PROCESSING. Selecting the 10 GB (Business Edition) version over the 1 GB (Web Edition) version will grant your database with more resources and raise the limitation settings.

It is evident from the description above that SQLAzure is not a straight forward solution for high load OLTP databases or data warehouse implementation. Working tips scalability design considerations and more on the next blog.

Guy

Windows Azure

Sunday, 10 January 2010 09:38 by Guy

Guy

In the last 12 months, virtualization and cloud computing has become one of the hottest issues in the hosting world.It started with companies offering Linux based cloud services for Windows, based on cloud servers and then it expanded to new companies going into elastic computing, such as Rackspace and Opsource. Yet it seems that when it comes to MS-Sql server support and .Net, all current solutions fall short. The major part of the management work ‘falls’ on the user and the cost is far higher compared to Linux solutions. The user is supposed to install anything above the basic OS and to take care of upgrades, monitoring and duplicating resources (servers) on his/her own, for scale out solutions. Some of the solution providers sell their offering as a testing environment platform or as for simulating production environment, reducing client operation costs, compared to purchasing hardware and hosting fees.

Then, a few months ago, a new major player entered the world of cloud computing: Microsoft with WindowsAzure.  Microsoft will officially launch their services in January 2010 as a production hosting platform, and new web server farms will be operational all over the world during 2010. They have currently invited every ISV or Bizspark client to use the WindowsAzure environment as part of their CTP, allocating them with a limited CPU and instances Tokens. We have were able to upload a partial solution (covering 70%) of our application in less than a day’s work.

To solve the versatility of OS configurations and provide an almost instantaneous scale up option, Microsoft Azure takes a different approach than other elastic .Net supporting solutions. Mainly, WindowsAzure solution limits the application working environment physical resources usage and configuration. The most trivial example is that you can’t write to files, writing and saving of local data is done to special blob objects (which by the way can resemble small DBs). The server instances are virtual, and I don’t mean VM or Hiper-V.  The application is running on an AppFabric environment. The Fabric has the ability to run worker-roles that are very close to services and web roles that are very close to web services. The actual code has to be compiled, especially for the AppFabric environment (a very simple process), but anything that was developed in .Net could be converted to Azure.

 

WindowsAzure

The usage bonuses from running on WindowsAzure are mind blowing: 

  • Scale out is preformed by changing configuration settings, and deployment to multiple servers takes about 15 (officially one day max).
  • Every instance is automatically duplicated and set to standby mode, so if your instance crashes the copy is brought to life in a matter of seconds.
  • You can run different versions of your application test performance results, and increase or decrease the number of instances in minutes.
  • Pay just for what you use, when prices in comparison to owned and hosted server are very low.
  • Fully redundant Hardware solution.
  • You can place your farm near your client location.
  • Automatic upgrades process to latest versions.
  • Configured security system.

 

   
 
The following technical resources are a good starting point to understand the Azure platform :

- Official Azure Site

- Pricing

Videos from PDC

- Developer blog

 

Microsoft has even taken its solution one step forward, and offers the WindowsAzure platform for private cloud implementation. Your organization can install the Azure platform as a virtualization solution for internal environments solution such as QA and staging (just think what can be done when it comes to load testing), or as part of your organization SaaS solution, providing a private application environment for different clients, installed on the same hardware.

What Azure is offering for SQL cloud solution- on my next post.

Coming soon …

 

To cloud or not to cloud

Sunday, 10 January 2010 09:02 by Guy

Guy I love looking at the sky and staring at the clouds, your imagination can run wild and you can invent wonderful stories about the shapes you see in the clouds, but they always seem so far away out of your reach. For me, especially as a DBA, it was same with cloud computing.

Cloud computing has been around for a long time, starting with on Google Apps and Amazon AWS. Working in medium size companies has limited my exposure to them. About a year ago I was asked to join a panel discussing “IT for startups”, when one of the most interesting issues raised was ‘should we use the cloud hosting solution?’ My answer then was no. Along the last year my view about cloud computing has shifted to favoring cloud computing as a partial solution for startups.

 

What are the benefits of cloud computing?


1) Scaling up and down is possible within a matter of hours. Moreover, you only pay for what use, and on an hourly basis. Meaning, if a new client comes along, you can place a request for ten new servers, and within the next day or hour you’ve receives them fully load-balanced and ready to go.
2) All hardware and OS management are the provider’s responsibility. No need for highly qualified IT tech that has wide knowledge in networking, security, virtualizations, storage, and FW.
3) You receive fully monitored OS and hardware services, including reporting and alerts.
4) You receive a fully redundant solution with an obligation for high availability.
5) Worldwide location distribution brings the application closer to your clients.
6) No need to upgrade your hardware every three years.

What are the problems with cloud computing?


1) These are not your servers! Your control on selected OS versions, maintenance and patches is limited.
2) These are not your servers! Placing sensitive data from passwords to your core technology is an issue.
3) These are not your server! If it crashes, nobody promises you how hard they will try to save the data stored on the hard drives.
4) These are not your server! For some reason, I can’t see a cloud solution passing a credit card organization inspection…
5) These are not your servers! You will probably have to make changes to your application to fit cloud computing, due to limitation of installed environment.
6) Windows .net based applications are not native to this environment. If you want to enjoy the monitoring and management benefits, you will have to use a non .net language.
7) Database solutions are very limited either in capacity and version or in manageability.

Deciding if to use cloud computing or not is not an easy decision. It will affect your application design and development environment. I can help with some point for consideration:

CDN on cloud?

Downloads require a lot of bandwidth. Your organization will probably want a redundant network (which cost a lot of money), and there is always an issue of being close to your clients (which require multiple locations). In order to solve these issues, you’re probably using some kind of a CDN solution. If you’re total download is not in Terabytes, I recommend looking into a cloud solution such as Amazon S3. In S3 payment is per usage that alone makes a huge difference (I’m talking about thousands of dollars per year) over buying a minimal quota package per month from major CDN providers.

Cloud computing?

If you are a new upcoming company, requiring just a few dedicates server including load balancing and firewall services , a managed dedicated solution will cost you 1,000-1,500$ per month per server. Each cloud server is about 200-500$ and you only pay for what you use on hourly basis. The key benefit is the ability to scale up in a matter of hour and not weeks or days. And it’s important to place your server close to your client, the latency is amazing a minimum of 1-2 second latency from US and some parts of Europe and far east to reach servers in IL.

Database?

If you require a simple DB services with storage requirements lower then 10G, and the number of hits on your server per second is not in lower thousands, finding an adequate SQL or MySql solution should not be a problem. Your solution will enjoy high availability redundancy and will be located near your clients. I’m fooling around with the lasts solution for cloud databases SQL Azure, actually it is the trigger for writing this blog but that will be on my next post. For now, I’m going to stare at the sky and look at the far away clouds.

Embeding an Ad tag into a Flash component

Wednesday, 6 January 2010 10:04 by Ziv

Ziv How easy is it to embed Ads into a flash player?

If you have looked at our demo sites or our widgets site from a developer point of view, you have probably noticed that the Ads seem to be integrated as a part of the Flash layer.

It looks obvious, just call the ad jpeg or flash file and place them in the correct location. right? Correct , but...
And here comes a big BUT. The ad URL is not something given to you on a golden plate.

Big Advertisement companies and AdNetwors don't think about the possibility that some strange programmer would like to retrieve the ad URL from their server using client side code embedded in flash.

Their systems are built to support calls for ads URLs using iFrame URL or a JavaScript code.

Try and get the Ad URL from an iFrame URL while in flash. You just can't, since it's in a different domain the browser security infrastructure prevents you from reading the HTML DOM of an object residing in a different domain.

So you like to know how we did it?
You can’t .It's confidential. Believe me I like to say more (and I did post it until our panic team read about it and i had to remove the paragraph about our solution) I promise that once I'm able to disclose how it all works I will.

In the meantime if you are a JavaScript freak and like to talk more about the different format of JavaScript code the advertisers use on their systems place a comment or send me an email.

Introduction to Ad placements on the internet

Thursday, 31 December 2009 11:12 by Guy

Guy Understanding ad placements key concepts is crucial to understanding the blogs that will be posted here. This blog will be dedicated to explaining player, concepts and obstacles to overcome for successful presentation of ad on a rich media client.

Key players,

Publishers – organizations that hold assets on which and ad can be displayed, such as web sites, toolbars, game providers or video content providers.

Advertisers – company’s who advertise their products on the web, or represents such clients.

AdNetworks – provide a market place were an advertiser can place his ad and reach multiple publishers and the other way around. Multiple advertiser results in the better coverage and a bidding war on the publisher assets, many publishers allow better targeting higher effectiveness of the ad campaign. So the bigger the market place is the higher the benefit is for all the players.

Concepts :

Assets – a place on which an ad can be presented.

Coverage – the percentage the AdNetwork will successfully return an ad to the certain publisher per geo location of the client and demographic consideration of the asset. There are several ad networks that hold inventory just for certain regions like the USA or Europe. If you are a publisher and have users from all over the world you might be forced to work with several AdNetworks to improve your coverage and better monetize your asset.

Impression –the presentation of an ad on the client side.

Click – click on the ad presented, result in redirecting to the advertiser site.

CTR – Click-through rate is a way of measuring the success of an online advertising campaign. Representing the ratio between the number of ad presented (impressions) and number of clicks.

Acquisition – an impression that resulted in a user actually registering or buying the advertised service.

CPA – Cost Per Action\ Acquisition a contract in which the advertiser pays for each specified action(perches, registration…)

CPC – Cost per click is the amount of money an advertiser pay per click on the ad.

eCPM – the value paid to the publisher per 1000 impressions. Actually all ad networks present earnings in their reports as eCPM values, even if payment resulted from CPA or CPC deals.

Obstacles to overcome:

• Flash and SilverLight clients used to display rich madia (movies and games) do not integrate with the format an ad is returned by the AdNetworks (iFram or JavaScript).

• When the game is developed or a movie filmed it is not designed for ad int0egration. To present the ad you have to find a location and a time on which to place an ad, and of course some code is required for the actual presentation. Last I heard there is no code integrated in avi or divx files and the requested add must fit the location found on the asset without interfering with the actual content presented on the client.

• Hopping – to retrieve an ad the client navigates to an AdNetwork server if there is no coverage he must navigate to the next AdNetwork. Navigation loss stands at about 5%-10%, and you have to develop a complicated to execute all of these hops.

There are two great blog posts that I urge you to read, they perfectly explain the process of placing an ad on an asset.

http://www.mikeonads.com/2007/05/01/the-ad-exchange-model-part-i/

http://www.mikeonads.com/2007/05/02/the-ad-exchange-model-part-ii/