<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
      <title>all rss</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=9d744e54d240a990785c0b6874264b99</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=9d744e54d240a990785c0b6874264b99&amp;_render=rss&amp;page=2"/>
      <pubDate>Thu, 01 Oct 2015 23:02:51 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Cloud Gates: March 2013 service upgrades</title>
         <link>http://blog.cloudgates.net/2013/04/march-2013-service-upgrades.html</link>
         <description>&lt;h3&gt;New deployment system&lt;/h3&gt;Last week we put a new deployment system into production. Deployment is basically a way of updating the software that runs the service, so for a product under active development it's a very important component. For CloudGates it's even more crucial, as you'll see later, but first I want to mention why would this matter to you.&lt;br /&gt;&lt;br /&gt;Our previous system was pretty sweet as well, but when updating the software on the nodes, the FTP server had to be restarted, meaning the existing connections had to be interrupted. It wasn't an issue when we were just starting, but at this point there's no moment in time when we can do this and not interrupt a number of transfers. This obviously causes us to be apprehensive when doing deployments, as if we do it too often, the service will appear to just randomly drop connections.&lt;br /&gt;&lt;br /&gt;If we were to find a way to deploy updates without interrupting existing connections, we would be free to deploy updates at any rate we want. And we did exactly that.&lt;br /&gt;&lt;br /&gt;Now, even when we upgrade the server all existing connections and transfer just keep on going. The older connections are just handled by the older version of the code, the one that was the newest available at the moment of connection, but new connections are handled by new code. We see a lot of long transfers, sometimes taking days, so in that timeframe we might do a number of deployments and will actually have five different versions of the server as long as anyone is using it. Once all connections to the old server are done it exits, but not before that.&lt;br /&gt;&lt;br /&gt;This soft upgrade process was something we intended to implement later, but having a number of rather big features ready for deployment it was clear that as those features are deployed, they will need to be tweaked and we need to have a way to do deployments freely. So even though a lot of features were ready to be released in March they were put on hold to put this deployment system into production.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;New monitoring and failover system&lt;/h3&gt;There was a small hiccup on one of the nodes yesterday due to a big number of server versions running they ran out of file descriptors. This is already fixed, but the important thing is that this issue had very little impact on the service. The reason the impact was small is that our new monitoring system took that node out of the pool as soon as it detected that it is having problems.&lt;br /&gt;&lt;br /&gt;This monitoring systems is also something we implemented and put into production this month. We use seven nodes located in a number of locations around the worlds to handle the customer connections locally and the monitoring system periodically tries to connect and log into each node. When it has problem connecting or thinks that things aren't going the way it expects it removes that node from the pool and in about half a minute that node is completely removed from the pool (the delay is caused by DNS TTL).&lt;br /&gt;&lt;br /&gt;So when the one of the nodes was having problems earlier, the monitoring system removed it from the pool and the Cloud Gates service itself kept working as if nothing happened.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;New error reporting&lt;/h3&gt;&lt;div&gt;Yet another update put into production recently is a centralized error reporting for the FTP servers. When anything unexpected happens on the server the error is logged and we are notified of it. FTP servers generate &lt;i&gt;a lot &lt;/i&gt;of logs, so having the errors highlighted is crucial. We can then go in and deploy a fix to whatever was wrong, which is usually some rare corner case we would not have encountered in synthetic testing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Upcoming updates&lt;/h3&gt;&lt;div&gt;You might have noticed a common theme for the March updates -- all of them are designed to make feature deployments safer. When we deploy new code we know that if it's problematic, the monitoring system will minimize the negative impact. We know that the error reporting will let us know what exactly causes the issue. And the deployment system will let us deploy an update in minutes without causing any disruption.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course we don't expect the new features to cause problems, but it's something you definitely want to be prepared for. And of course specifics of our service make the new deployment system practically required. Without it adding new features had to always be weighted against the need to restart the server and now we can finally start deploying freely.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We already have a number of features developed that were waiting for these updates before rollout and now we will start happily putting them into production. Expect quite a few new features this month!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/cloudgates/~4/CxLXayIgEyc&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Sergey Schetinin</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5434168270678220205.post-1057309833552404449</guid>
         <pubDate>Wed, 03 Apr 2013 22:46:00 +0000</pubDate>
      </item>
      <item>
         <title>Cloud Gates: Technology behind CloudGates [part 3]: Servers around the world appearing as one</title>
         <link>http://blog.cloudgates.net/2013/03/technology-behind-cloudgates-part-3.html</link>
         <description>&lt;h2&gt;Keeping data in sync&lt;/h2&gt;&lt;p&gt;The customer might be using the same gate in Europe via one of our European nodes and in US at the same time, using one of the nodes on our US network. We need to make sure he would not be able to tell he's actually using two separate servers and we need to do it without adding overhead. &lt;p&gt;As explained in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blog.cloudgates.net/2013/02/technology-behind-cloudgates-part-1.html&quot;&gt;an earlier blog post&lt;/a&gt; we don't use caching on the nodes, so that's one potential problem solved already -- the customer sees all of the same data in both locations without any delays. Another question is how do we handle the initial login? &lt;h2&gt;Mapping credentials to an S3 bucket&lt;/h2&gt;&lt;p&gt;Having our own implementation of the protocols comes to the rescue again! If we were using some other FTP server software we would need to propagate gate management actions from the UI to all of our nodes. That is a harder problem than might seem at first glance -- any number of nodes might be down for maintenance and new nodes need to come online fully synced etc. We forgo this issue completely by being smart about the login process. &lt;p&gt;When a user signs into the gate, the FTP (or SFTP or WebDAV) his client software sends the FTP credentials to the server. Our server in turn forwards this login request to a login server over an encrypted connection. The login server then checks the database and responds with the gate details to the server. &lt;p&gt;If the credentials were valid, the server can now work directly with the client and will not need to talk to the login server until the next login. If the login credentials were wrong, the server obviously rejects the connection. &lt;p&gt;By splitting the login server into a separate entity we radically simplify our management and make the gateway nodes themselves practically stateless. And having stateless nodes is the holy grail of scalability.&lt;img src=&quot;http://feeds.feedburner.com/~r/cloudgates/~4/ZIck0w5QdEs&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Sergey Schetinin</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5434168270678220205.post-4061957909226541581</guid>
         <pubDate>Thu, 28 Mar 2013 00:34:00 +0000</pubDate>
      </item>
      <item>
         <title>Cloud Gates: Technology behind CloudGates [part 2]: Scaling</title>
         <link>http://blog.cloudgates.net/2013/03/technology-behind-cloudgates-part-2.html</link>
         <description>One of the primary advantages of using CloudGates with S3 as your FTP server is that you will never run out of disk space. And a lot of our customers are indeed making use of this, which means we need to handle Terabytes of data coming through the servers.&lt;br /&gt;&lt;h2&gt;How many servers do we need?&lt;/h2&gt;If we were using just one big server that would work for a while, but at some point no server would be capable of handling all the transfers we see. Having just one server would also leave us open to network outages, high-usage customers would&amp;nbsp;severely&amp;nbsp;impact bandwidth available to each other and the server would need to be placed in a specific datacenter anyway making it slow for the rest of the world.&lt;br /&gt;&lt;br /&gt;It was clear to us from the beginning that we will need multiple nodes around the world for our service to meet the quality standards we set for ourselves. The simplest way to do this would have been to assign users to a specific node and create the FTP user on that node only. This would save us some work, but it's not future-proof -- eventually nodes would need to be&amp;nbsp;decommissioned&amp;nbsp;or upgraded and the users would need to be migrated. Assigning users to nodes would have been a recipe for creating uneven load across servers and exposing us to downtime.  &lt;br /&gt;&lt;h2&gt;Making the service scale&lt;/h2&gt;To make things transparent for the user and to allow us to scale the service all of our gateway nodes are interchangeable. No matter what node the customer connects to it will accept the same credentials and will provide the same service.&lt;br /&gt;&lt;br /&gt;Having such flexibility lets us deploy as many nodes as we need in any number of Points of Presence around the world. We made all the right architectural decisions to keep the nodes on equal footing, and the payoff is truly unlimited scaling.&lt;img src=&quot;http://feeds.feedburner.com/~r/cloudgates/~4/C8jxbBQcIsg&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Sergey Schetinin</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5434168270678220205.post-6594729356900815264</guid>
         <pubDate>Thu, 14 Mar 2013 16:21:00 +0000</pubDate>
      </item>
      <item>
         <title>Cloud Gates: SFTP / SSH support is in production</title>
         <link>http://blog.cloudgates.net/2013/03/sftp-ssh-support-is-in-production.html</link>
         <description>Our gates into S3 and Glacier had SFTP support in beta for a while but it's finally running in production. All of the existing and new gates have SFTP enabled and your connection details are on the gate info page.&lt;br /&gt;&lt;br /&gt;SFTP sounds similar to FTP but is actually a completely different protocol. It relies on SSH for transport (which means it's encrypted) and supports multiple concurrent transfers over the same connection.&lt;br /&gt;&lt;br /&gt;If your client supports it, it's generally preferred over FTP, but the protocol is more complex than FTP and some of the clients have a suboptimal implementation which means it's could be slower than FTP in those cases. &lt;br /&gt;&lt;br /&gt;We use a 100% in-house implementation of the protocol which allows us to make SFTP gates to S3 as efficient and fast as humanly possible. Our implementation supports a set of secure ciphers which cover all of the clients we came across. (For example some WinSCP versions need aes-128-cbc and Postini needs blowfish-cbc).&lt;br /&gt;&lt;br /&gt;SSH also has support for private-key authentication, but we didn't implement it in the gates at this point. Let us know if this is something you'd want to see on our service.&lt;img src=&quot;http://feeds.feedburner.com/~r/cloudgates/~4/he65tAWzk1A&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Sergey Schetinin</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5434168270678220205.post-514601441475595407</guid>
         <pubDate>Thu, 07 Mar 2013 13:19:00 +0000</pubDate>
      </item>
      <item>
         <title>Cloud Gates: Technology behind CloudGates [part 1]: Providing FTP servers</title>
         <link>http://blog.cloudgates.net/2013/02/technology-behind-cloudgates-part-1.html</link>
         <description>&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://cloudgates.net/&quot;&gt;CloudGates&lt;/a&gt; is cloud-hosted service where you can create an FTP server in literally seconds. That server is backed by your Amazon S3 or Glacier account and is private. Sounds simple enough, but there's a lot more to it than meets the eye. &lt;br /&gt;&lt;br /&gt;We make it look as simple as possible to the customer, but to make it happen there's a neat technical solution working behind the scenes. A naive implementation would have used an existing FTP server implementation and would try to emulate a filesystem underneath it, but that is not a robust solution and what we do is different. &lt;br /&gt;&lt;h2&gt;Benefits of the custom implementation&lt;/h2&gt;The CloudGates servers are custom implementations of the FTP, SFTP and WebDAV protocols that translate protocol commands directly into operations on the underlying storage. &lt;br /&gt;&lt;br /&gt;There's no caching happening on our servers and it's a good thing — each upload, rename and every other operation is carried out directly on the S3 storage itself. This way the success and failure reported to the FTP client is always true to what happened. You will never see any data out of sync and will never need to wait until it appears on S3. There's no possibility of data loss in transit when the cache overflows and no security issues with the data hanging around in caches on the server. We don't use a cache system so all of these problems are non-existant.  &lt;br /&gt;&lt;h2&gt;Supporting huge transfers&lt;/h2&gt;This also allows us to support arbitrarily large uploads (for now we enforce a limit of 32Gb for a single upload, but we will be removing the limit altogether). The uploads do not hit the disk or buffer on the server, instead we create a multipart upload and upload chunks of the file as we receive them. Resuming uploads is implemented in a similar fashion. &lt;br /&gt;&lt;br /&gt;We even upload the chunks concurrently whenever possible. So even though the S3 API itself does not present any simple ways of doing streaming uploads, with Cloud Gates you get them for free. We even observed that our concurrent code can often make the uploads through our service &lt;i&gt;faster than uploads directly to S3&lt;/i&gt; from dedicated S3 client software! &lt;br /&gt;&lt;br /&gt;This is yet another area where our own implementation pays off big time. Having full control over both the FTP protocol and S3 API communication allows the gateway to do these operations efficiently even if you are using any old FTP client. This would not be possible with a less committed approach and would result in a severely limited service. An FTP gateway that only supports bulk uploads is useful, but we opted to implement every command there is and make all of them robust and it worked out really well.&lt;img src=&quot;http://feeds.feedburner.com/~r/cloudgates/~4/UuDrCSdPdqw&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Sergey Schetinin</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5434168270678220205.post-2258709117706711984</guid>
         <pubDate>Thu, 21 Feb 2013 14:08:00 +0000</pubDate>
      </item>
   </channel>
</rss>
<!-- fe8.yql.bf1.yahoo.com compressed/chunked Thu Oct  1 23:02:51 UTC 2015 -->
